繁体   English   中英

ASP.NET MVC中的@ Html.BeginForm出现问题

[英]Trouble with @Html.BeginForm in ASP.NET MVC

我有一个看起来像这样的表格:

@using (Html.BeginForm("Login", "Home", FormMethod.Post, new { @class = "nav-login-form" }))
{
    @Html.TextBoxFor(m => m.LoginForm.Username, new {@placeholder = "username"})
    @Html.HiddenFor(m => m.LoginForm.Username)
    @Html.PasswordFor(m => m.LoginForm.Password, new { @placeholder = "password" })
    @Html.HiddenFor(m => m.LoginForm.Password)
    <input type="submit" value="login"/>
}

但是,提交此表单时,似乎未执行controller方法。 它具有如下签名:

[HttpPost]
public ActionResult Login(NavBarLogin loginForm)

我的表单位于HomepageViewModel作为模型类型的局部视图中。 该模型内部有一个LoginForm对象,这是表单应该发布到控制器的对象。 像这样将模型从索引视图传递到部分视图:

@Html.Partial("_NavBarPartial", Model)

关于此表单为何无法正常工作的最好猜测是,因为视图中定义的模型与表单使用的模型对象不同。 但是,我不能简单地将NavBarLogin用作模型类型,因为模型的其他部分已在局部的其他地方使用。 我可以尝试进一步分解,但这真的是使此表单起作用的必要条件吗? 我的假设甚至正确吗?

编辑 :我的论坛是这样呈现的,动作应该是空白的吗?

<form action="" class="nav-login-form" method="post">
  <input id="LoginForm_Username" name="LoginForm.Username" placeholder="username" type="text" value="" />
  <input id="LoginForm_Password" name="LoginForm.Password" placeholder="password" type="password" />
  <input type="submit" value="login"/>

您可以使用BindAttributePrefix属性

[HttpPost]
public ActionResult Login([Bind(Prefix="LoginForm")] NavBarLogin loginForm)

由于您的输入被渲染为

<input type="text" name="LoginForm.Username" value=.../>

并且NavBarLogin具有属性Username (不是具有属性UserName的复杂属性LogInForm ),其作用是有效剥离"LoginForm." 从发布的值,以便它们将正确绑定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM