在我的模型中,我有这些属性,
public string[] SelectedIDs {get; set;}
public int BookId {get;set;}
public int LanguageId {get;set;}
在我看来,我有以下内容,
@Html.HiddenFor(model => model.SelectedIDs )
@Html.HiddenFor(model => model.BookId )
@Html.HiddenFor(model => model.LanguageId )
使用JavaScript数组(SelectedItemIds)我正在更新SelectedIDs,
$a("#SelectedIDs").val(SelectedItemIds.join());
alert($a("#SelectedIDs").val());
警报成功返回逗号分隔值。
如果我对我的操作post
没有问题,我会以逗号分隔SelectedIDs
。但是我的要求是在对话框中填充视图,但是在传递时我总是将SelectedIDs
视为空。
我尝试了以下两种方法。
方法1:
我的行动是:
public ActionResult MyMethod1(MyModel model)
{
}
我使用了动作链接
@Html.ActionLink("My Book", "MyMethod1", "BookOrder", new { @id = "SubmitBooks", @class = "subBook", data_dialog_id = "AddBookDialog", data_dialog_title = "Add Books", data_dialog_width = 800, data_dialog_height = 550 })
在此方法中,我成功获得model.BookID
以及model.LanguageId
,但model.SelectedIDs
为null
。
方法2:
我的行动是:
public ActionResult MyMethod2(string[] selectedItems, int bookId, int langId)
{
}
我使用了动作链接
@Html.ActionLink("My Book", "MyMethod2", "BookOrder", new { @selectedItems= Model.SelectedIDs , @bookId= Model.BookId, @langId = Model.LanguageId }, new { @id = "SubmitBooks", @class = "subBook", data_dialog_id = "AddBookDialog", data_dialog_title = "Add Books", data_dialog_width = 800, data_dialog_height = 550 })
我也同时获得了bookid
和langId
,但没有selectedItems
,这是null
。
答案 0 :(得分:1)
序列化数组时需要设置traditional:true。
$.ajax({
type: "POST",
traditional: true,
url: "../BookOrder/MyMethod2",
data: { function_param: SelectedIDs}
});
找到了关于传统的正确解释:https://stackoverflow.com/a/5497151/2419531
如果您不想使用traditional:true,则可以使用JSON.stringify将数据作为字符串传递并指定contentType:
$.ajax({
type: "POST",
url: "../BookOrder/MyMethod2",
contentType: 'application/json',
data: JSON.stringify({function_param: SelectedIDs}),
});