Asp.net-Mvc-3

頁面載入時觸發驗證

  • August 23, 2012

目前,我有一個使用 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 文件….

好的。發現了問題。由於試圖進行模型綁定,正在發生驗證。發生這種情況是因為我們的 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();
   }

您還可以從 ModelState 中清除錯誤

ModelState.Clear();

引用自:https://stackoverflow.com/questions/9832742