Asp.net mvc 如何在asp.net mvc中发布元组中的一项

Asp.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

我是asp.NETMVC新手。有了这个参考。我使用元组将两个模型发送到一个视图中。我正在创建两个表单和两个提交按钮; 但是当它访问服务器时,值将变为null

@模型元组

@{
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 }); }