[英]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"/>
您可以使用BindAttribute
的Prefix
属性
[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.