Где разместить валидационные аннотации ViewModel или объекта Domain? - PullRequest
3 голосов
/ 02 декабря 2010

Мой вопрос

Поскольку я передаю UserCreateViewModel из моего контроллера создания, это означает, что моя проверка (ModelState.IsValid) будет работать только на UserCreateViewModel, если комментарииопределено на нем.Но я не могу определить DataAnnotation для каждого из моих ViewModels, потому что это будет много работы.Вместо этого я хочу поставить его на модель домена пользователя.Итак, как мне исправить метод Create, чтобы он исправлялся как моя работа с аннотациями, так и без отображения кода в контроллер.

// Мой метод создания контроллера

[HttpPost]
public ActionResult Create(UserCreateViewModel user)
{
    if (ModelState.IsValid)
    {
        var createUser = new User();
        Mapper.Map(user, createUser);

        _repository.Add(createUser);

        return RedirectToAction("Details", new { id = createUser.UserId });
    }

    return View("Edit", user);
}

// UserCreateViewModel -> CreateСпециальная модель представления

public class UserCreateViewModel
{
    public string UserName { get; set; }
    public string Password { get; set; }
}

// Пользователь -> Доменный объект

[MetadataType(typeof(User.UserValidation))]
public partial class User 
{
    private class UserValidation
    {
        [Required(ErrorMessage = "UserName is required.")]
        [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")]
        [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Password is required.")]
        [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")]
        public string Password { get; set; }
    }
}  

1 Ответ

1 голос
/ 02 декабря 2010

Проверка должна быть по крайней мере включена в модель представления, потому что это то, что вы получаете в качестве пользовательского ввода. Что касается проверки модели, вы также можете добавить ее, но до тех пор, пока вы передаете модель представления в действие POST (именно это вы и должны делать), проверка модели будет игнорироваться. Конечно, это не проблема, потому что модель - это то, что может быть повторно использовано в других приложениях, которые не используют модели представлений, и таким образом ваша модель гарантированно будет действительной. Что касается ASP.NET MVC, этот шаг не является обязательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...