数组未从视图MVC传递到控制器

时间:2014-07-22 13:38:29

标签: javascript asp.net-mvc asp.net-mvc-4

在我的模型中,我有这些属性,

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.SelectedIDsnull

方法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 }) 

我也同时获得了bookidlangId,但没有selectedItems,这是null

1 个答案:

答案 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}),

});