我试图弄清楚如何将 MVC
Model
发送到我的 ActionResult
方法,但是 上的数据AccountsManagementDetailsModel 模型
始终为空或 null
,即使模型对象本身已正确构造,仅具有空属性。
我在 Controller 上的方法:
public async Task<ActionResult> ResetPassword(AccountsManagementDetailsModel model)
{
...
}
我的JQuery:
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
:
public class AccountsManagementDetailsModel : UserInfo
{
public bool New { get; set; }
}
public class UserInfo
{
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[Display(Name = "Username")]
public string UserName { get; set; }
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
public bool Customer { get; set; }
public string CustomerID { get; set; }
public bool MustChangePassword { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd hh:mm}", ApplyFormatInEditMode = true)]
public DateTime? LastLogin { get; set; }
}
我做错了什么?
最佳答案
发送模型的正确方法是为模型的每个属性创建输入。这可能很困难,但您可以使用 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
属性),并允许您将模型发布到 Controller 并将其绑定(bind)在那里。
无论如何,如果您不想以这种方式更改代码,您可以像这样更改 Controller 代码:
public async Task<ActionResult> ResetPassword(string model)
{
AccountsManagementDetailsModel modelBind = new JavaScriptSerializer().Deserialize<AccountsManagementDetailsModel>(model);
}
此行应将序列化的字符串
从 Json 反序列化为模型。
关于javascript - 以模型作为参数的隐藏表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997094/