我正在尝试弄清楚如何将MVC
Model
发送到我的ActionResult
方法,但AccountsManagementDetailsModel model
上的数据始终为空或{{1即使模型对象本身是正确构造的,只有空属性。
我在控制器上的方法:
null
我的 JQuery :
public async Task<ActionResult> ResetPassword(AccountsManagementDetailsModel model)
{
...
}
我的 var form = $('<form action="@Url.Action("ResetPassword", "AccountsManagement")" method="POST">');
var input = $("<input>")
.attr("type", "hidden")
.attr("name", "model").val(@Html.Raw(Json.Encode(Model)));
form.append(input + "</input></form>");
form.appendTo('body').submit();
:
AccountsManagementDetailsModel
我做错了什么?
答案 0 :(得分:1)
发送模型的正确方法是为模型的每个属性创建输入。这可能很困难,但您可以使用EditorTemplate在HtmlHelpers
的帮助下生成html。
我能看到的最简单的方法是改变你的代码:
var form = $('<form action="@Url.Action("ResetPassword", "AccountsManagement")" method="POST">' + formHtml + "</form>");
var formHtml = '@Html.Raw(Html.EditorForModel().ToString().Replace("\r\n", "<br />"))';
form.append(formHtml + "</form>");
form.appendTo('body').submit();
Helper EditorForModel
应该为您创建有效的输入(具有正确的name
属性),并允许您将模型发布到控制器并将其绑定到那里。
无论如何,如果您不想以这种方式更改代码,您可以像这样更改控制器代码:
public async Task<ActionResult> ResetPassword(string model)
{
AccountsManagementDetailsModel modelBind = new JavaScriptSerializer().Deserialize<AccountsManagementDetailsModel>(model);
}
这一行应该将序列化的string
从Json反序列化到您的模型。