2012-11-26 55 views
0

我有一個asp.net頁面接受兩個輸入值 - 名稱和地址。他們都是必填字段。我已經使用了必需的字段驗證器和驗證摘要。隱藏ASP.Net中的冗餘錯誤消息ValidationSummary

當用戶沒有輸入兩個值時,如果錯誤消息發生了兩次,但錯誤消息是多餘的,即使存在兩個錯誤,我也只需要顯示一條錯誤消息。

  1. 我們如何使用jQuery處理它?
  2. 我們如何使用ASP.Net標記處理它?

:我最初認爲驗證控制將發射HTML頁面而負載本身,這樣我可以使用「查看源」和做jQuery的HTML元素。但事實並非如此。它使得只有如下

<div id="vsumAll" class="validationsummary" style="display:none;"> </div> 

結果

enter image description here

ASP.Net標記

<body> 
<form id="form1" runat="server"> 
<div> 
    <table cellpadding="5" cellspacing="5" width="100%"> 
     <tr> 
      <td> 
       <table border="0" align="center" cellpadding="0" cellspacing="0" width="100%"> 
        <tr> 
         <td> 
          Name 
         </td> 
         <td> 
          <asp:TextBox runat="server" ID="txtName"></asp:TextBox> 
          <asp:RequiredFieldValidator runat="server" ID="reqWorkorderFormat" ControlToValidate="txtName" 
           Text="*" ErrorMessage="Fill all values!"></asp:RequiredFieldValidator> 
         </td> 
        </tr> 
        <tr> 
         <td> 
          Address 
         </td> 
         <td> 
          <asp:TextBox runat="server" ID="txtAddresss"></asp:TextBox> 
          <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="txtAddresss" 
           Text="*" ErrorMessage="Fill all values!"></asp:RequiredFieldValidator> 
         </td> 
        </tr> 
        <tr> 
         <td colspan="2"> 
          <asp:Button runat="server" ID="btnSave" Text="Save" /> 
         </td> 
        </tr> 
        <tr> 
         <td colspan="2"> 
          <asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" /> 
         </td> 
        </tr> 
       </table> 
      </td> 
     </tr> 
    </table> 
</div> 
</form> 
</body> 
+2

爲什麼不用不同的驗證器使用不同的錯誤信息?這也更加用戶友好。 –

+0

@TimSchmelter我在這裏沒有選擇。這是批准的要求。除非有證據表明無法處理它,否則我無法改變它。 – Lijo

+1

然後至少將「vlaues」更改爲「values」;-) –

回答

2

這是一個小的hackish,但它會工作:

添加以下Javasc RIPT功能:

function submitValidate() { 
    var isValid = Page_ClientValidate(''); 

    if (!isValid) { 
     setTimeout("$('#vsumAll ul li:not(:first)').remove()", 5); 
    } 

    return isValid; 
} 

在您的提交按鈕添加此:

<asp:Button runat="server" ID="btnSave" Text="Save" OnClientClick="submitValidate();"/> 

而且finaly,請確保您在ValidationSummary

說明ClientIDMode="Static"
它使用jQuery來去除除了ValidationSummary中的第一個li - 實際上它是UnorderedList(例如ul)。
我把它放在5ms setTimeout因爲我們只希望它在ValidationSummary完成後將所有項目添加到ul之後才能運行。
只有當Page_ClientValidate失敗時,代碼纔會運行 - 這是執行ClientSide驗證的功能。

+1

「Page_ClientValidate」不是「同步」調用嗎?我們爲什麼要設定一個時間? – Lijo

+1

正如您注意到時間延遲不在ClientValidate上。它在Jquery上。正如我在我的回答中所述,延遲是針對某些瀏覽器(例如FF)發生在不同線程上的摘要。 – Blachshma