2015-12-07 2 views
1

Iam новичок в MVC. Если iam, используя нижеприведенный код, тогда Model.IsValid не подтверждает объект, который в этом случае является Клиентом.mvc: Model.IsValid не работает, если Iam с использованием Request.Form

public ActionResult Submit() 
    { 
     Customer custObj = new Customer(); 
     custObj.CustomerCode = Request.Form["CustomerCode"]; 
     custObj.CustomerName = Request.Form["CustomerName"]; 

     if (ModelState.IsValid) 
      return View("Load", obj); 
     else 
      return View("EnterCustomer"); 
    } 

Если Iam передаёт объект Customer в параметре, то Model.IsValid работает отлично.

public ActionResult Submit(Customer obj) 
    { 
     //Customer custObj = new Customer(); 
     //custObj.CustomerCode = Request.Form["CustomerCode"]; 
     //custObj.CustomerName = Request.Form["CustomerName"]; 

     if (ModelState.IsValid) 
      return View("Load", obj); 
     else 
      return View("EnterCustomer"); 
    } 

Может ли кто-нибудь помочь мне узнать причину.

+0

Не работает, вы имеете в виду, что загрузка вида не возвращается? каковы правила аннотаций данных для вашей модели и переданные значения. – Rex

+2

Ваша привязка к модели уже произошла, прежде чем перейти к действию 'Сумит', поскольку он не принимает никаких параметров, поэтому ModelState не проверяется. – user1672994

+2

, если у вас нет модели, как будет работать валидация? –

ответ

5

Это не работает, потому что MVC никогда не связывался с самой моделью. Вы вручную переопределили его, поэтому MVC не имеет понятия, действительна ли модель или нет. Это не событие известно, что модель custObj.

ModelState.IsValid установлен перед тем, как будет вызываться метод действия, поэтому в вашем втором примере, когда вы разрешаете MVC связываться с самой моделью, она работает. Во-первых, это не работает, потому что вы создаете модель и выполняете ручную привязку к ней.

Update

Вы можете, однако, также вручную запустить проверку модели с помощью вызова ValidateModel или TryValidateModel на контроллере.

Документация:

+0

Спасибо, я написал код в соответствии с вашим предложением и его работой сейчас. – Rishabh

0

Как уже упоминалось в других ответах, ваша модель уже проверен перед действием 'Отправить' называется. Таким образом, когда вы меняете модель изнутри своего действия, вам придется вручную проверить модель. Вы можете использовать для этого код ниже.

var context = new ValidationContext(custObj, serviceProvider: null, items: null); var validationResults = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(custObj, context, validationResults, true);

if (isValid) return View("Load", obj); else return View("EnterCustomer");

использование ниже URL для получения дополнительной информации. http://odetocode.com/blogs/scott/archive/2011/06/29/manual-validation-with-data-annotations.aspx

Смежные вопросы