Note that there are some explanatory texts on larger screens.

plurals
  1. POASP.NET MVC Custom Validation in View Model Best Practice
    primarykey
    data
    text
    <p>I am trying to use a combination of Domain Driven Design with Test Driven Development for this application I am building in ASP.NET MVC 3. My archictecture is set up with Repositories, Domain Models, View Models, Controllers and Views. All validation will be handled in the view model. I set up my view model to inherit from "IValidatableObject" so that my validation attributes and my custom validation that i set up in the "Validate" method are both executed when my controller method calls "ModelState.IsValid". The problem I am running into is accessing my repository in the Validate method of my view model. I need to access the repository to check for duplicate records in the database. It seems like the best idea would be to create a property of IRepository type and set that property by passing injecting my repository into the constructor of the view model. For example:</p> <pre><code>public class UserViewModel : IValidatableObject { public UserViewModel(User user, IUserRepository userRepository) { FirstName = user.FirstName; LastName = user.LastName; UserRepository = userRepository; UserName = user.UserName; } public string UserName { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public IUserRepository UserRepository { get; set; } public IEnumerable&lt;ValidationResult&gt; Validate() { UserCriteria criteria = new UserCriteria { UserName = this.UserName }; IList&lt;User&gt; users = UserRepository.SearchUsers(criteria); if (users != null &amp;&amp; users.count() &gt; 0) { yield return new ValidationResult("User with username " + this.UserName + " already exists." } } } </code></pre> <p>Do you guys think this is a good idea?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload