2012-03-29 65 views
0

是否有可能通過ModelState.AddModelError(inputId)爲輸入添加一個錯誤,以在UI上產生錯誤突出顯示並使其必須像客戶端驗證一樣行爲,即當用戶在輸入錯誤類中更改時將被刪除。asp.net mvc通過ModelState輸入添加和隱藏錯誤

+0

是的,這是它通過設計工作的方式。如果它不適用於您,請確保您使用的屬性名稱實際上與在頁面上呈現的模型屬性匹配,並且您已將驗證消息包含在視圖中(儘管如此,客戶端也應該這樣做) )。 – tvanfosson 2012-03-29 12:40:35

回答

2

型號:

public class MyViewModel 
{ 
    [Required] 
    public string Foo { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ModelState.AddModelError("foo", "Foo is required"); 
     return View(new MyViewModel()); 
    } 
} 

查看:

@model MyViewModel 

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.Foo) 
    @Html.ValidationMessageFor(x => x.Foo) 
    <button type="submit">OK</button> 
} 

現在,當呈現頁面時,富域將紅色突出顯示一個錯誤,當用戶在字段中鍵入內容並模糊,錯誤將被刪除。

+0

我需要它來動態生成輸入。我沒有適合使用屬性的模型。 – drunkcamel 2012-03-29 12:41:50

+0

@drunkcamel,客戶端驗證依賴於數據註釋屬性。如果您沒有合適的屬性,您將不得不編寫自定義屬性並實現「IClientValidatable」接口以指示需要應用的確切的客戶端驗證規則。如果有自定義驗證規則,您還必須編寫自定義客戶端適配器並使用JavaScript函數轉置所有自定義邏輯。 – 2012-03-29 12:48:36