我在控制器中有一个动作:
public int Edit(MyViewModel viewModel)
{
// code to edit
}
我发布的表单为:
$.post("/MyController/Edit", $("#form").serialize()).then(
function () {
$("#dialog1").dialog("close");
$("#list-grid").trigger('reloadGrid');
});
这很好用。我得到的参数格式与MyViewModel
相同。
但是,我需要再将一个参数传递给动作。所以我把控制器改为:
public int Edit(MyViewModel viewModel, string oldValue)
{
// code to edit
}
现在,我尝试按照以下方式将viewModel
和oldValue
一起传递给使用ajax调用的操作:
var object = $("#form").serialize();
$.ajax({
url: '@Url.Action("Edit", "MyController")',
type: "POST",
contentType: // please see below
data: { viewModel: object, oldValue: oldVal},
dataType: // please see below
contentType: 'application/json',
success: function (response) {
alert("Successfully updated!");
}
});
虽然我能够获得oldValue
的值,但viewModel
仍为null
,尽管它与$.post(...)
中发送的内容完全相同在控制台中检查。
如果我将contentType
指定为以下任何一项:
application/x-www-form-urlencoded; charset=UTF-8
或,
application/json; charset=utf-8
或,
application/json
呼叫失败。
我尝试过但未指定dataType
,并将其指定为json
,但徒劳无功。
创建自定义类以对发送的json
进行反序列化是不可行的。
我该如何解决这个问题?
答案 0 :(得分:0)
假设oldVal
的值不为NULL。你可以试试这个:
var object = $("#form").serialize();
$.ajax({
url: '@Url.Action("Edit", "MyController")',
type: "POST",
contentType: application/json; charset=utf-8 // please see below
data: JSON.stringify{ viewModel: object, oldValue: oldVal},
success: function (response) {
alert("Successfully updated!");
}
});
答案 1 :(得分:0)
在Dim ctrl As CommandButton
Private Sub CommandButton1_Click()
Set ctrl = Me.Controls.Add(bstrProgID:="Forms.commandbutton.1", Name:="CommandButton1", Visible:=True)
End Sub
dataType: "JSON",