2010-02-18 33 views
1

內置的ASP的幾個表單元素驗證器。它們工作正常 - 如果我點擊提交按鈕(一個按鈕),驗證發生而沒有回傳,錯誤顯示在ValidationSummary中。當發生這種情況時,我還想調用一個代碼隱藏的方法來更改元素的CSS,將它們的背景顏色切換爲紅色以反映錯誤。我試圖在提交按鈕中同時使用OnClick和OnClientClick來調用此方法,但兩個參數似乎都不會觸發該方法 - 客戶端驗證始終優先,並且回發永遠不會發生。任何人都可以啓發我嗎?問題與我使用的回傳和驗證

編輯#1

使用orandovs鏈接工作不行了改變元素本身,但如何其父?

例如,在C#我做:

foreach (BaseValidator validator in Page.Validators) 
{ 
    Panel panel = validator.Parent as Panel; 

    if (!validator.IsValid) 
     panel.CssClass = "error"; 
    else 
     panel.CssClass = "normal"; 
} 

有沒有辦法讓母公司控制(這些都是一致的面板,所以我知道的CssClass會存在)使用JavaScript?喜歡的東西:

$("#" + Page_Validators[i].controltovalidate.parent).CssClass("error"); 
+1

這裏是一個類似的問題:http://stackoverflow.com/questions/1301508/change-textboxs-css-class-when -asp-net-validation-fails – orandov 2010-02-18 18:58:16

回答

4

如果客戶端驗證失敗,沒有回傳,所以你有兩個選擇:

  1. 寫客戶端的JavaScript做你想做的事情。
  2. 將所有驗證程序來驗證服務器只(設置EnableClientScript =「假」)(不推薦)

你可以在驗證失敗Ajax調用,但涉及客戶端代碼,因此它屬於下選項1.

+0

謝謝,我正在嘗試方法#1與orandov的鏈接,但遇到了一個障礙...編輯原始問題以反映。 – confuzicle 2010-02-18 19:11:39

1

爲什麼不能修改該對象的CssClass屬性或寫入使用回覆於()

1

客戶端驗證將阻止回發一些JavaScript代碼。有幾種方法可以做到這一點。如果您確實希望發生回發,您可以將其放在更新面板中並強制進行部分回發,這會觸發您的代碼。您也可以在JavaScript中執行CSS更改,並保留客戶端的所有內容。

2

我假設您使用的是JQuery庫,並且您使用的是來自this answer的JavaScript代碼。

jquery有一個parent()和一個addClass()函數。文檔:parent,addClass

下面是修改代碼來設置父元素的CSS類:

if (!Page_Validators[i].isvalid) { 
    $("#" + Page_Validators[i].controltovalidate).parent().addClass("error"); 
} 
else{ 
    //Make sure you remove the error class if the error has been fixed 
    $("#" + Page_Validators[i].controltovalidate).parent().removeClass("error"); 
} 
+0

+1。這肯定比我的回答更有幫助。 – David 2010-02-18 23:06:48