对于我网站的登录页面,我想列出我网站的最新消息,并显示一些字段让用户登录。所以我想我应该创建一个登录视图模型 - 我称之为{{ 1}}。
LoginVM
包含登录字段的LoginVM
模型和新闻列表的Login
。
这是List<NewsItem>
型号:
Login
这是public class Login
{
[Required(ErrorMessage="Enter a username.")]
[DisplayName("Username")]
public string Username { get; set; }
[Required(ErrorMessage="Enter a password.")]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string Password { get; set; }
}
视图模型:
LoginVM
这是我被卡住的地方。在我的登录控制器中,我收到了public class LoginVM
{
public Login login { get; set; }
public List<NewsItem> newsItems { get; set; }
}
。
LoginVM
在代码中,我正在检查[HttpPost]
public ActionResult Login(LoginVM model, FormCollection form)
{
if (ModelState.IsValid)
{
// What?
是否有效,如果视图模型实际上是ModelState
模型,这将正常工作,但现在它是Login
没有验证属性一点都不。
如何通过其成员LoginVM
“遍历”来验证它们?我是否以这种方式使用LoginVM
做了一些根本错误的事情?
答案 0 :(得分:2)
在ViewModel中尝试执行此操作:
public class LoginVM
{
[Required]
public Login login { get; set; }
public List<NewsItem> newsItems { get; set; }
}
答案 1 :(得分:1)
或者,如果newsItems用于显示目的,并且不需要验证,那么您只需将登录模型传递给您的操作方法。
[HttpPost]
public ActionResult Login([Bind(Prefix = "Login")]Login model)
{
if (!Model.IsValid)
}
您还需要在视图中使用EditFor和LabelFor帮助程序。
<%= Html.TextBoxFor(m => m.Login.Username) %>
答案 2 :(得分:0)
i'd like give you a modal solution:
@if (Request.IsAuthenticated)
{
<li class="span3">
<a href="Home/AboutMe" role="button" class="btn" data-toggle="modal">[@Membership.GetUser().UserName]</a>
</li>
<li>@Html.ActionLink("logoff","LogOff","Account")</li>
}
else
{
<li class="span3">
<a href="#myModal" id="Login" role="button" class="btn" data-toggle="modal" >Login</a>
</li>
}
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel"> Login </h4>
</div>
<div class="modal-body">
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls">
<input type="text" id="inputEmail" placeholder="Email">
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputPassword">Password</label>
<div class="controls">
<input type="password" id="inputPassword" placeholder="Password">
</div>
</div>
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input type="checkbox">
Remember me
</label>
<button type="submit" class="btn">Sign in</button>
</div>
</div>
</form>
</div>