2011-09-11 78 views
12

我爲View Model類添加了ValidationSummary Html助手,該類有5個必填字段。它的作品得到了漂亮的紅色字丟失1,缺少2等 但我需要顯示一個消息不是其中五個(如:「您的輸入是無效的。」)。這可以通過ValidationSummary來完成嗎?如何從驗證摘要中刪除列表

回答

14

你有兩個選擇(至少):

既可以使用驗證摘要和排除屬性的錯誤:

@Html.ValidationSummary(true, "The input is not valid") 

或錯誤信息,在你的行動自定義鍵關聯:

if (!ModelState.IsValid) 
{ 
    ModelState.AddModelError("myerrorsummary", "The input is not valid"); 
} 

並將其顯示在頁面上:

@Html.ValidationMessage("myerrorsummary") 
+1

第一個解決方案似乎最好的,因爲它應該工作的客戶端,但它只在不使用UnobtrusiveJavaScript的情況下工作! – pauloya

+0

我添加了我的解決方案。 – pauloya

4

你可以嘗試跳過助手,如果你想要做的只是顯示一個消息,如果ModelState中是無效的。只需在ViewData內檢查ModelState即可使用。

@if (!ViewData.ModelState.IsValid) 
{ 
    <p>Your input is not valid.</p> 
} 
2

如果你看一下MVC3源代碼,你會發現,目前,如果你同時具有UnobtrusiveJavaScriptEnabled使用ValidationSummaryexcludePropertyErrors=true,不會有任何渲染驗證摘要。

我能夠在啓用UnobtrusiveJavascript的情況下使用MVC3顯示一條消息,以進行客戶端驗證。不要使用@Html.ValidationSummary所有,並呈現:

@{ 
    //Show the message when there are server side errors 
    ViewBag.ValidationSummaryClass = ViewData.ModelState.IsValid ? "validation-summary-valid" : "validation-summary-errors"; 
} 
<div class="@ViewBag.ValidationSummaryClass" data-valmsg-summary="true"> 
    <span>Before you can continue, please make sure you have completed the mandatory fields highlighted above.</span> 
    <ul style="display:none"/> 
</div> 

通知的display:none,不顯眼的JavaScript仍然充滿錯誤信息的列表,但他們一直隱藏。

0

一種強制方法我已經在MVC3使用:

if (!ModelState.IsValid) 
{ 
    ModelState.AddModelError("", "Some contextual error message"); 
} 

和您的網頁上顯示:

<% if(!ViewData.ModelState.IsValid) { %> 
    <span class="error"><%=ViewData.ModelState[String.Empty].Errors[0].ErrorMessage %> </span> 
<% } %>