代码之家  ›  专栏  ›  技术社区  ›  Deniz Dogan

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

  •  2
  • Deniz Dogan  · 技术社区  · 14 年前

    对于我的网站的登录页面,我想列出我的网站的最新消息,还显示了几个字段,让用户登录。所以我想我应该建立一个登录视图模型-我称之为 LoginVM .

    登录 Login List<NewsItem> 为新闻列表。

    这就是 型号:

    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; }
    
    }
    

    这就是 登录

    public class LoginVM
    {
        public Login login { get; set; }
        public List<NewsItem> newsItems { get; set; }
    }
    

    这就是我被卡住的地方。在我的登录控制器中,我通过了 登录 .

    [HttpPost]
    public ActionResult Login(LoginVM model, FormCollection form)
    {
        if (ModelState.IsValid)
        {
            // What?
    

    在代码里我正在检查 ModelState 是有效的,如果视图模型实际上是 登录 模特,但现在 完全没有验证属性。

    我该怎么做 登录

    3 回复  |  直到 14 年前
        1
  •  2
  •   thitemple    14 年前

    在ViewModel中,尝试执行以下操作:

    public class LoginVM
    {
        [Required]
        public Login login { get; set; }
        public List<NewsItem> newsItems { get; set; }
    }
    
        2
  •  1
  •   David    14 年前

    [HttpPost]
    public ActionResult Login([Bind(Prefix = "Login")]Login model)
    {
        if (!Model.IsValid)
    }
    

    您还需要在视图中使用EditFor和labelforhelpers。

    <%= Html.TextBoxFor(m => m.Login.Username) %>
    
        3
  •  0
  •   robin521    11 年前
    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>