2010-01-11 62 views
4

我的asp.net頁面動態顯示207個問題(我無法控制這個)。每個問題有10個驗證器。當ASP呈現頁面它會創建以下三行每個驗證:防止asp.net生成someValidator.display =「Dynamic」;

var qsnQuestionSet_adult_qcQuestion_1_vldMaxAnswersValidator = document.all ? document.all["qsnQuestionSet_adult_qcQuestion_1_vldMaxAnswersValidator"] : document.getElementById("qsnQuestionSet_adult_qcQuestion_1_vldMaxAnswersValidator"); 
qsnQuestionSet_adult_qcQuestion_1_vldMaxAnswersValidator.display = "Dynamic"; 
qsnQuestionSet_adult_qcQuestion_1_vldMaxAnswersValidator.evaluationfunction = "CustomValidatorEvaluateIsValid"; 

g雖然這三條線都只是4KB你可以想像,4 * 10 * 207是不少。如何將所有驗證器標記爲動態並將評估函數設置爲相同的值,而無需爲我生成該行?

回答

2

當EnableClientScript選項設置爲true時,此代碼由ASP.NET自動生成。據我所知,擺脫它的唯一方法是將其設置爲false,但顯而易見的缺點是驗證只會在回發期間發生在服務器端。
爲了解決這個問題,你可以將自定義的JavaScript驗證功能綁定到相關的控件事件,如文本框onBlur事件,但不知道你想要驗證的值的更多細節很難進一步推測這是否可能是一個辦法。

+0

我很確定OP的問題在於,當您將顯示樣式設置爲動態時,無論該屬性如何設置,都會自動生成JavaScript,並且在呈現的頁面上佔用太多空間。 – 2010-01-11 15:37:53

+0

@Andy West - 是的,你說得對,我會刪除這個。在等待代碼編譯時,不應嘗試並快速回答問題:P – 2010-01-11 15:45:58

+0

回答修改以正確反映問題。 – 2010-01-11 15:58:05

1

此javascript由System.Web.UI.WebControls命名空間的BaseValidator & CustomValidator類的AddAttributesToRender()方法呈現給客戶端。看看他們在Reflector

Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter) 
    ... 
    If (enumValue <> ValidatorDisplay.Static) Then 
    Me.AddExpandoAttribute(writer2, clientID, "display", PropertyConverter.EnumToString(GetType(ValidatorDisplay), enumValue), False) 
    End If 
    ... 
    MyBase.AddExpandoAttribute(writer2, clientID, "evaluationfunction", "CustomValidatorEvaluateIsValid", False) 
End Sub 

您可以編寫自己的類來替換CustomValidator並更改它呈現的方式。 但是,在這種情況下,我認爲最好是編寫自己的JavaScript來處理驗證,而不是使用驗證器控件。

P.S.如果您擔心HTML的大小,首先應該在IIS服務器上啓用gzip壓縮。

+0

我想這裏根本就沒有漂亮的解決方案:( 作爲最後的手段我會研究.net 4代碼來檢查是否有任何改變 – 2010-01-21 11:41:37