ASP.NET MVC:如何验证包装在ViewModel中的模型?

时间:2010-06-15 14:26:29

标签: c# asp.net-mvc model-view-controller validation asp.net-mvc-2

对于我网站的登录页面,我想列出我网站的最新消息,并显示一些字段让用户登录。所以我想我应该创建一个登录视图模型 - 我称之为{{ 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做了一些根本错误的事情?

3 个答案:

答案 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">&times;</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>