ASP.NET MVC: как проверить модель, обернутую в ViewModel? - PullRequest
2 голосов
/ 15 июня 2010

Для страницы входа в мой веб-сайт я хотел бы перечислить последние новости для своего сайта, а также отобразить несколько полей, чтобы пользователь мог войти в систему. Поэтому я решил, что должен создать модель представления входа в систему - я называю это 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 "обход" через его членов для проверки их всех?Я делаю что-то в корне неправильно, используя ModelState таким образом?

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

В вашей ViewModel попробуйте сделать это:

public class LoginVM
{
    [Required]
    public Login login { get; set; }
    public List<NewsItem> newsItems { get; set; }
}
1 голос
/ 16 июня 2010

В качестве альтернативы, если newsItems предназначены для отображения и не нуждаются в проверке, вы можете передать только модель входа в свой метод действия.

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

Вы также можете использовать помощники EditFor и LabelFor в своем View.

<%= Html.TextBoxFor(m => m.Login.Username) %>
0 голосов
/ 15 января 2014
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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...