当我点击登录按钮时,我从未将模型发布到服务器上。但是,如果我接受FormCollection,我会看到值。如何使其自动绑定到我的模型而不是搜索表单集合?
据我所知,有一些常见问题:
1 - 您的视图未指定您使用的模型(@model myApp.Models.name)
2 - 您的型号不使用属性
3 - 缺少任何必填字段
控制器
[HttpGet]
public ActionResult Password()
{
return View(new AuthViewModel());
}
[HttpPost]
public ActionResult Password(AuthViewModel password)
{
if (password == null || string.IsNullOrEmpty(password.Password))
{
ViewBag.Error = Constants.ErrorMessages.UserPassword_PassBlank;
return View(new AuthViewModel());
}
//success
return Redirect("/");
}
模型
public class AuthViewModel
{
public string Password { get; set; }
}
查看
@model MvcApplication1.Models.AuthViewModel
@{
ViewBag.Title = "Password";
}
<h2>Password</h2>
@using (Html.BeginForm())
{
<div>@Html.TextBoxFor(m => m.Password,new{placeholder="Password",type="password",autofocus=""})</div>
<div><button id="btnLogin" type="submit">Login</button></div>
<div class="error">@ViewBag.Error</div>
}
答案 0 :(得分:0)
使用以下
@using (Html.BeginForm())
{
<div>@Html.PasswordFor(model => model.Password)</div>
<div><input id="btnLogin" type="submit" value="Login"/></div>
<div class="error">@ViewBag.Error</div>
}
答案 1 :(得分:0)
不确定为什么Dan的答案在没有尝试的情况下无效,看起来应该如此。 我查看了一些登录表单的代码,与您的类似。 这是我的:
public class SignInModel
{
[Required]
[Display(Name = "Enter your email address")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Enter your password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
我看到的主要区别是我的密码上有[DataType(DataType.Password)]属性。不确定这是否会产生那么大的差异。
我注意到的另一件事是不同的是,在我的表单中,我指定表单方法是POST。我还使用了EditorFor()
助手而不是文本框或密码:
@using (Html.BeginForm("SignIn", "Account", "POST"))
{
<div class="form-field">
@Html.LabelFor(x => x.Email)
@Html.EditorFor(m => m.Email)
</div>
<div class="form-field">
@Html.LabelFor(x => x.Password)
@Html.EditorFor(m => m.Password)
</div>
<div class="form-remember">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(x => x.RememberMe)
</div>
<button type="submit">
Sign In</button>
}