我是新來的MVC.NET,似乎無法理解爲什麼我的驗證函數沒有被調用,它位於MyModel類中。驗證方法沒有在視圖模型內部的模型上調用
爲MyModel:
Public string Name { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
// validation logic which is not being called on post.
}
當我發帖的形式,實際上,我張貼我的ViewModel具有爲MyModel的一個屬性。
視圖模型:
Public MyModel { get; set; }
控制器:
[HttpPost]
public ActionResult Index(ViewModel model)
{
// this is always true??
if(this.ModelState.IsValid) { blah blah }
}
它總是真實的原因是因爲內部爲MyModel我驗證邏輯沒有被從視圖模型上的POST調用。
這可能是一個noob問題,但我不知道。謝謝你的幫助。
我沒有時間發佈代碼,對不起,但看着「自定義模型粘合劑」。爲'ViewModel'創建一個自定義模型綁定器,當'public ActionResult Index(ViewModel model)'被調用時執行。在自定義模型聯編程序中,您將能夠調用驗證方法。 – 2014-10-20 18:08:39
只是擴大Jason的評論,[這SO帖子](http://stackoverflow.com/questions/6431478/how-to-force-mvc-to-validate-ivalidatableobject)應該給你一個想法如何去與'自定義式樣黏結劑'。 – Michael 2014-10-20 18:23:16
嗯,這不是MVVM - 它是MVC。你的「ViewModel」是一個模型。控制器是...控制器。而cshtml文件是視圖。模型 - 視圖 - 控制器。用於Web應用程序的MVVM框架通常位於客戶端。 Angular和Knockout是MVVM客戶端框架的兩個例子。 – Will 2014-10-20 18:58:16