任何人都可以帮助我找到我的代码将表单数据和列表框数据传递给Controller的代码是否出了问题?
?这是AJAX代码:
$("#btnGetData").click(function () {
var button1 = "getdata";
var listItms = $('#ChooseRight').val(); // this is Lisbox field in Razor view
var formData = $('#GenForm').serialize(); //the Form ID of razor view
var wildcardprodtype = $('#WildCardProdType').val();
$.ajax({
type: 'POST',
url: '/Report/LongRunningProcess', //controller name
data: JSON.stringify({
button: button1,
viewModel: formData,
ChooseRight: listItms,
WildCardProdType: wildcardprodtype
}),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (data) {
}
});
这是控制器,在调试中,我可以看到"按钮"的数据,WildcardProdType可以正确传递,但不能传递ViewModel和Choseright列表的数据。有什么原因?
public ActionResult LongRunningProcess(string button, ReportViewModel viewModel, List<string> ChooseRight, string WildCardProdType)
{
....
这是@htmlbegin表单标头:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "GenForm" } ))
{
顺便说一句,当前的剃须刀视图使用reportViewModel如下:
@model MVCPROD.Models.ViewModels.ReportViewModel
使用serializeArray()
代替serialize()
,以便您可以在"序列化数组"中包含更多项目。
$("#btnGetData").click(function () {
var button1 = "getdata";
var listItms = $('#ChooseRight').val();
var wildcardprodtype = $('#WildCardProdType').val();
var formData = $('#GenForm').serializeArray();
//Below three lines are not required if ChooseRight, WildCardProdType elements are inside the form
formData.push({ name: 'button', value: button1 });
formData.push({ name: 'listItms', value: listItms });
formData.push({ name: 'wildcardprodtype', wildcardprodtype });
$.post(
'/Account/LongRunningProcess',
formData,
function (response) {
}
);
});