JQueryグリッドを使用してページにデータを表示しています。コントローラアクションメソッドに渡す必要のあるグリッドにフィルタを適用するためのチェックボックスの一覧があります。私の問題は、選択されたチェックボックスの値がPOSTデータを渡す前に正しく取得されているにもかかわらず、コントローラに表示されません。私が選択したチェックボックスをページにロードしている場合、その場合は値が渡されています。なぜこれが起こっているのか、私は非常に混乱しています。私は本当にどんな助けでも素晴らしいだろう。私はグリッドを結合するために使用していた下のコードを参照してください:SP、SS及びSAKパラメータのJQueryグリッドPostDataがコントローラアクションメソッドに値を渡していません - MVC3
function BindGrid() {
var selectedPriority = [];
$('#priority input:checked').each(function() {
selectedPriority.push($(this).val());
});
var selectedState = [];
$('#state input:checked').each(function() {
selectedState.push($(this).val());
});
var selectedAckState = [];
$('#ackState input:checked').each(function() {
selectedAckState.push($(this).val());
});
var x = convertIntArrayToString(selectedPriority);
var y = convertIntArrayToString(selectedState);
var z = convertIntArrayToString(selectedAckState);
jqDataUrl = "Alarm/LoadjqData";
// Set up the jquery grid
//$("#jqTable").jqGrid('clearGridData');
$("#jqTable").jqGrid({
url: jqDataUrl,
datatype: "json",
mtype: "POST",
postData: {
sp: x,
ss: y,
sak: z
},
cache: false,
// Specify the column names
colNames: ["Id", "PointRef", "Value", "AlarmStateName", "AckStateName", "Priority", "AlarmDate"],
// Configure the columns
colModel: [
{ name: "AlarmId", index: "AlarmId", width: 70, align: "left" },
{ name: "PointRef", index: "PointRef", width: 200, align: "left" },
{ name: "Value", index: "Value", width: 200, align: "left" },
{ name: "AlarmStateName", index: "AlarmStateName", width: 150, align: "left" },
{ name: "AcknowledgementStateName", index: "AcknowledgementStateName", width: 170, align: "left" },
{ name: "Priority", index: "Priority", width: 100, align: "left" },
{ name: "AlarmDate", index: "AlarmDate", width: 250, align: "left" }
],
// Grid total width and height
width: 700,
height: 250,
// Paging
toppager: true,
pager: $("#jqTablePager"),
rowNum: 10,
rowList: [5, 10, 20],
viewrecords: true, // Specify if "total number of records" is displayed
// Default sorting
sortname: "AlarmId",
sortorder: "desc",
// Grid caption
caption: "Telemetry Alarms"
}).navGrid("#jqTablePager",
{ refresh: true, add: false, edit: false, del: false },
{}, // settings for edit
{}, // settings for add
{}, // settings for delete
{sopt: ["cn"]} // Search options. Some options can be set on column level
)
//.trigger('reloadGrid', [{ page: 1}]);
.trigger('reloadGrid');
}
function convertIntArrayToString(data) {
var x='';
//alert(data.length);
for(var i=0;i<data.length;i++) {
x = x + data[i] + ",";
}
if (x != '') {
x = x.substr(0, x.length - 1);
//alert(x);
}
return x.toString();
}
//Controller action method
[HttpPost]
public ActionResult LoadjqData(string sidx, string sord, int page, int rows, bool _search, string searchField, string searchOper,
string searchString, string sp, string ss, string sak)
{
//code ommited.
return Json(jsonData);
}
値はコントローラにapprearingされていません。
このポストを試してみてください。 http://stackoverflow.com/questions/9849469/variables-contain-values-but-in-action-they-equals-null/9849726#9849726 –
こんにちはnaim、応答のおかげで、このポストは役に立たない。私が気づいたのは、グリッドが 'PostData'を通じて提供されるパラメータをキャッシュすることです。私が$( "#jqTable")をアンロードしている場合、jqGrid( 'GridUnload');グリッドを作成し、それをバインドすると、パラメータが正しく渡されます。 Jqueryがパラメータをキャッシュするのを止める良い方法はありますか?提案してください – binu