gpt4 book ai didi

javascript - 以模型作为参数的隐藏表单提交

转载 作者:行者123 更新时间:2023-12-03 07:50:47 26 4
gpt4 key购买 nike

我试图弄清楚如何将 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; }
}

我做错了什么?

最佳答案

发送模型的正确方法是为模型的每个属性创建输入。这可能很困难,但您可以使用 EditorTemplateHtmlHelpers 的帮助下生成 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com