title: MVC 4 Conditional Model Validation with Entity Framework
body: <p>Is it possible to place conditions on a ViewModel where data equals a specific value in one field within the entity framework, the required element or entire object is removed from the ViewModel before using TryValidateModel on the ViewModel?</p>
  
  <p>I would like to remove HomeValue and PurchasePrice from the Model validation where OwnOrRent (model.OwnOrRent) is not equal to 1 or 9.</p>
  
  <p><strong>Model.cs</strong></p>
  
  <pre><code>public class Address
  {
      public int Id { get; set; }
  
      [DisplayName("House Name or Number")]
      [StringLength(50)]
      public string HouseNameOrNumber { get; set; }
  
      [DisplayName("Post Town")]
      [StringLength(50)]
      public string PostTown { get; set; }
  
      [Required(ErrorMessage = "Own or Rent is Required")]
      [DisplayName("Own or Rent")]
      [StringLength(50)]
      public string OwnOrRent { get; set; }
  
      [Required(ErrorMessage = "Mortgage/Rent Amount is Required")]
      [DisplayName("Mortgage/Rent Amount")]
      [StringLength(50)]
      public string MortgageRent { get; set; }
  
      [Required(ErrorMessage = "Home Value is Required")]
      [DisplayName("Home Value")]
      [StringLength(50)]
      public string HomeValue { get; set; }
  
      [Required(ErrorMessage = "Purchase Price is Required")]
      [DisplayName("Purchase Price")]
      [StringLength(50)]
      public string PurchasePrice { get; set; }
  }
  </code></pre>
  
  <p><strong>HomeController.cs</strong></p>
  
  <pre><code>public ActionResult Application(int id)
  {
      var viewAddressModel = new Address();
  
      using (
          var dbEntities = new DbEntities(new EntityConnection(_df.DbEntities)))
      {
          var model = dbEntities.Applications.Single(e =&gt; e.Id == id);
  
          viewAddressModel.Id = Id;
          viewAddressModel.HouseNameOrNumber = model.HouseNameOrNumber;
          viewAddressModel.PostTown = model.PostTown;
          viewAddressModel.OwnOrRent = GetStatus(model.OwnOrRent);
          viewAddressModel.MortgageRent = model.MortgageRent.ToString();
          viewAddressModel.HomeValue = model.HomeValue;
          viewAddressModel.PurchasePrice = model.PurchasePrice;
  
          if (model.OwnOrRent != "1" || model.OwnOrRent != "9")
          {
              ModelState.Remove("HomeValue");
              ModelState.Remove("PurchasePrice");
          }
  
          if (!TryValidateModel(viewAddressModel))
          {
              return PartialView("Address", viewAddressModel);
          }
      }
  
      var vm = new ApplicationViewModel { Item = CreateApp(id) };
  
      return PartialView("Application", vm);
  }
  </code></pre>
  
  <p>As you can see I have tried to use ModelState.Remove but this has no effect.</p>
  
  <p>Any assistance with this would be much appreciated?</p>