2013-05-08 3 views
0

Я хочу использовать настраиваемое свойство jqgrid для сохранения некоторого значения сеанса ASP.NET на странице, но, похоже, не может заставить его работать.Пользовательское свойство jqgrid не может быть изменено?

Сетка определена ниже, с пользовательским свойством «MyVariable».

$("#myGrid").jqGrid({ 
    url: RootAbsolutePath + "Customer/GetCustomerList", 
    datatype: "json", 
    mtype: 'POST', 
    page: 1, 
    rowNum: 10, 
    rowList: [10, 20, 30], 
    pager: $("#myPager"), 
    toppager: true, 
    colNames: column_names, 
    colModel: [ 
     { name: "CUSTOMERNUMBER", index: "CUSTOMERNUMBER", width: 150, align: "center", "formatter": customerEditLink }, 
     { name: "DEALERSHIPID", index: "DEALERSHIPID", width: 150, align: "center", stype: "select", searchoptions: { "value": dealerShopSelector} }, 
     { name: "IDENTITYNUMBER", index: "IDENTITYNUMBER", width: 150, align: "center" }, 
     { name: "CUSTOMERNAME", index: "CUSTOMERNAME", width: 150, align: "left" }, 
     { name: "CUSTOMERTYPE", index: "CUSTOMERTYPE", width: 120, align: "center", "stype": "select", "searchoptions": { "value": typeSelector} }, 
     { name: "MOBILE", index: "MOBILE", width: 120, align: "center" }, 
     { name: "ADDRESS", index: "ADDRESS", width: 400, align: "left" }, 
    ], 
    autowidth: true, 
    shrinkToFit: false, 
    height: "100%", 
    viewrecords: true, 
    hoverrows: true, 
    sortname: "CUSTOMERNAME", 
    sortorder: "asc", 
    MyVariable: "Hello World!" 
}); 

В контроллере я установил значение MYVARIABLE и возвращения данных Json, надеясь сохранять это значение на сетке:

public JsonResult GetCustomerList() 
    { 
     var model = new someModel(); 
     List<object> listOfObjects = new List<object>(); 
     // do something with the model and get data into listOfObjects 

     var jsonData = new 
     { 
      total = model.TotalPages, 
      page = model.page, 
      records = model.totalRecords, 
      MyVariable = "Hello Controller!",   
      rows = listOfDataObjects 
     }; 

     return Json(jsonData, JsonRequestBehavior.AllowGet); 
    } 

Теперь попробуйте открыть variale после страницы загружаются.

var $grid = $('#myGrid'); 
alert($grid.jqGrid('getGridParam', 'MyVariable')); 

Он всегда показывает «Hello World», а не «Hello Controller!». Означает ли это, что пользовательское свойство не может быть изменено после загрузки сетки?

Во-вторых, в этом примере, если пользователь выбирает заголовок столбца CUSTOMERTYPE для фильтрации данных, как мне получить значение отфильтрованного критерия?

Я новичок в jqGrid, и это безумно, чтобы получить простую вещь для работы. Любая помощь действительно ценится!

ответ

1

Если включить некоторые дополнительные свойства в ответ JSON вернулся с сервера, то вы можете увидеть внутри beforeProcessing и loadComplete:

loadComplete: function (data) { 
    $(this).jqGrid("setGridParam", {MyVariable: data.MyVariable}); 
} 

или

beforeProcessing: function (data) { 
    $(this).jqGrid("setGridParam", {MyVariable: data.MyVariable}); 
} 

В качестве альтернативы вы можете использовать userdata часть ответ сервера (см. the documentation и the answer и this one).

С другой стороны Данные для конкретной сессии необходимо сохранять обычно только на стороне сервера или в виде файла cookie (как часть HTTP-заголовка). Поэтому вам следует подумать, действительно ли использование настраиваемой опции jqGrid действительно правильное в вашем случае.

ОБНОВЛЕНО: Для того, чтобы отправить MyVariable обратно на сервер, вы можете использовать, например, beforeRequest обратного вызова:

beforeRequest: function() { 
    var $self = $(this), 
     postData = $self.jqGrid("getGridParam", "postData"); 
    // postData is object which contains information which will be send 
    // to the server. we can modify it here 
    postData.MyVariable = $self.jqGrid("getGridParam", "MyVariable"); 
} 
+0

К сожалению, где именно должна эта функция loadComplete быть добавлены? Я попытался добавить в jqGrid, но выдает исключение, которое не имеет такого метода. – user2361287

+0

@ user2361287: Это функция обратного вызова. Вы должны добавить его, как и любой другой вариант jqGrid ('colModel',' datatype' и т. Д.). – Oleg

+0

Спасибо, Олег. Я нашел свою проблему, я скопировал setGridparam. Он должен быть установленGridParam. Теперь я близок к решению моей проблемы, пользовательское свойство MyVariable теперь обновляется в сетке. Но мне все равно нужно получить эту переменную в классе Controller в C#. Есть простой способ, не проходящий как параметр url, потому что эта переменная может содержать много специальных символов и приведет к аннулированию URL-адреса? – user2361287

Смежные вопросы