Asp.net mvc 如何在asp.net mvc中发布元组中的一项
我是asp.NETMVC新手。有了这个参考。我使用元组将两个模型发送到一个视图中。我正在创建两个表单和两个提交按钮; 但是当它访问服务器时,值将变为nullAsp.net mvc 如何在asp.net mvc中发布元组中的一项,asp.net-mvc,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 4,Razor,我是asp.NETMVC新手。有了这个参考。我使用元组将两个模型发送到一个视图中。我正在创建两个表单和两个提交按钮; 但是当它访问服务器时,值将变为null @模型元组 @{ ViewBag.Title=“登录”; } @using (Html.BeginForm("Login", "User", FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl })) { @Html.AntiForgeryToken() @Html.Va
@模型元组
@{
ViewBag.Title=“登录”;
}
@using (Html.BeginForm("Login", "User", FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<ol>
<li>
@Html.LabelFor(m => m.Item1.EmailID)
@Html.TextBoxFor(m => m.Item1.EmailID, new { @id = "txt_login_EmailID" })
@Html.ValidationMessageFor(m => m.Item1.EmailID)
</li>
<li>
@Html.LabelFor(m => m.Item1.Password)
@Html.PasswordFor(m => m.Item1.Password)
@Html.ValidationMessageFor(m => m.Item1.Password)
</li>
<li>
<input type="submit" value="Login" id="btn_login" />
@Html.CheckBoxFor(m => m.Item1.RememberMe)
@Html.LabelFor(m => m.Item1.RememberMe, new { @class = "checkbox" })
</li>
</ol>
</fieldset>
}
`
任何更改都需要查看或发布方法尝试以下操作:
[HttpPost]
public ActionResult Login([Bind(Prefix = "Item1")] LoginModel loginUser, string returnUrl)
{
...
}
由于您的值的前缀是Item1
,因此您应该在模型绑定器中指出这一点。当然,您的放弃密码
操作也是如此:
[HttpPost]
public ActionResult ForgotPassword([Bind(Prefix = "Item2")] ForgotPassword model)
{
...
}
这是错误的做法。使用子操作: 控制器
[ChildActionOnly]
public ActionResult LoginForm(string returnUrl)
{
ViewBag.returnUrl = returnUrl;
return View(new LoginModel());
}
[ChildActionOnly]
public ActionResult ForgotPasswordForm(string returnUrl)
{
ViewBag.returnUrl = returnUrl;
return View(new ForgotPassword());
}
然后为每个视图创建一个视图(您只需为每个视图复制现有的表单视图代码。请记住为视图设置适当的模型并关闭布局:
LoginForm.cshtml
@model DAL.Models.LoginModel
@{ Layout = null; }
<!-- Form code here -->
@model DAL.Models.ForgotPassword
@{ Layout = null; }
<!-- Form code here -->
它现在工作正常。但我想知道为什么值会变为null,因为您的输入字段名为
name=“Item1.EmailID”
?注意Item1
前缀?这是因为您使用的帮助程序:@Html.TextBoxFor(m=>m.Item1.EmailID,new{@id=“txt\u login\u EmailID”})
。但是您的LoginModel
没有名为Item1.EmailID的属性。它有一个名为EmailID
的属性。不幸的是,在POST请求负载中没有发送这样的值,并且默认的模型绑定器无法知道(除非您告诉他)他应该将请求正文中的Item1.EmailID
值绑定到您模型的EmailID
属性。模型绑定器按约定工作感谢您的解释。我现在明白了。@DarinDimitrov谢谢您似乎我弄错了。我更正了。现在工作正常。感谢路线图
@model DAL.Models.LoginModel
@{ Layout = null; }
<!-- Form code here -->
@model DAL.Models.ForgotPassword
@{ Layout = null; }
<!-- Form code here -->
@{ Html.RenderAction("LoginForm", new { returnUrl = ViewBag.returnUrl }); }
@{ Html.RenderAction("ForgotPasswordForm", new { returnUrl = ViewBag.returnUrl }); }