2012-03-23 43 views
5

目前,我有一個使用Razor View引擎的MVC 3應用程序。我有不引人注目的驗證啓用。問題在於,出於某種原因,在頁面加載時,我的編輯視圖顯示所需字段的錯誤(即使字段有值)。有沒有人碰到過這個?任何解決這個問題的建議?謝謝。驗證在頁面加載

樣品場的問題:在型號

<div class="full"> 
      <label>Description:</label> 
      @Html.EditorFor(x=>x.Description, new{@class="super-textarea"}) 
      @Html.ValidationMessageFor(x => x.Description) 

     </div> 

數據註釋:

 [Required, DataType(DataType.MultilineText)] 
    public virtual string Description { get; set; } 

WebConfig啓用設置:

 <add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

當然,適當的jQuery文件....

+0

你的代碼片段將有很大的幫助 – AFD 2012-03-23 00:55:55

+0

所以...它實際上並不似乎是一個問題與不顯眼的驗證,而是我的模型狀態在頁面加載之前變得無效.... – user1287132 2012-03-23 02:49:46

回答

10

好的。發現問題。由於模型綁定試圖發生驗證。這是因爲我們的Get方法看起來像這樣。

[HttpGet, RequestedObjectFilter] 
    public virtual ViewResult Edit(TKey id, T requestedObject) 
    { 

     return View(requestedObject); 
    } 

.NET MVC的一個特徵是,每當有參考值被作爲在的ViewResult的方法簽名參數傳遞,ModelBinding被觸發,這反過來觸發關閉驗證。我們將對象傳遞給我們的方法的原因是由於我們的RequestedObjectFilter會從我們的抽象存儲庫中獲取相關實體,並通過ActionParameters屬性將它傳遞給此方法。我們重構了RequestedObjectFilter來設置ViewModel,使我們可以從方法中刪除參數,從而解決問題。現在,我們的方法是這樣的:

 [HttpGet, RequestedObjectFilter] 
    public virtual ViewResult Edit(TKey id) 
    { 

     return View(); 
    } 
+0

太棒了!這幫助了我,因爲我遇到了同樣的問題,謝謝。 – 2012-08-01 22:46:39

14

您也可以從ModelState中清除錯誤

ModelState.Clear(); 
+0

經過幾個小時的嘗試不同的事情,包括看到這篇文章,但沒有認爲它適用,我錯了。這解決了我的問題。 – Caverman 2018-02-21 18:53:32