2011-05-20 17 views
1

我希望我可以粘貼我的標記,但它太複雜並且包含很多對客戶公司名稱的引用。我希望有豐富經驗的人能夠指引我走向正確的方向。ASP.NET 3.5驗證組不能正常工作

我們有一個母版頁,其中包含ValidationSummary,它不是驗證組的一部分。在我們的內容頁面上,我們有另一個分配給名爲ValReject的驗證組的ValidationSummary。在內容頁面上還有一個CustomValidator,它使用ClientValidationFunction和一個按鈕,這兩個按鈕都被分配給ValReject。

當我點擊按鈕時,客戶端函數會執行一次,但錯誤會同時報告驗證摘要,內容頁面上的內容和母版頁上的內容。我甚至還添加了第三個驗證摘要,並將其組設置爲「asdf」之類的內容,但也會報告,這意味着所有三個驗證摘要在頁面上顯示相同的錯誤。

然後我創建了一個單獨的ASP.NET測試項目,粘貼了所有的代碼,然後運行它並驗證它應該如何。

然後我在內容頁面上使用了AutoEventWireup。當我將它設置爲false時,驗證有效,但頁面加載事件不會觸發。那是怎麼回事?

我知道你可能需要的代碼樣本,但就像我說的,我只是不能做,沒有經過一個巨大的頭痛會(相信我,主人和內容頁的標記是巨大的。

問題這裏是:有沒有人有一個想法,可能會導致單個驗證器報告頁面上的所有驗證摘要,即使其中只有一個與驗證器和按鈕共享相同的驗證組?

編輯:粘貼我的測試應用程序的標記,我不得不刪除一些標籤,以使其工作,因爲測試應用程序沒有對真正的母版頁使用的一些程序集的引用。我刪除的一些事情是:

<%@ Register Assembly="RadMenu.Net2" Namespace="Telerik.WebControls" TagPrefix="radM" %> 

<radM:RadMenu ID="RadMenu1" runat="server" DataSourceID="smdsMenu" Skin="CssGrey" ClickToOpen="True" EnableViewState="False" CausesValidation="false" /> 

所以,它的作品在我的測試應用程序的事實使我認爲我們正在做我們的生產應用程序的東西,我不會在我的測試應用程序做結論。是的,我知道這是模糊的,但也許一個燈泡會在別人的腦海中熄滅。

回答

3

男子:使用Page_ClientValidate任何外部驗證在JavaScript

的形式完成,幾個小時和幾個小時的旋轉我的輪子,我終於明白了。我們使用這個擴展方法來禁用按鍵雙擊:

public static void DisableDoubleClick(this Button Control) 
    { 
     System.Text.StringBuilder sb = new System.Text.StringBuilder(); 

     sb.Append("if (typeof(Page_ClientValidate) == 'function') { "); 
     sb.Append("if (Page_ClientValidate() == false) { return false; }} "); 
     sb.Append("this.disabled = true;"); 
     sb.Append(Control.Page.ClientScript.GetPostBackEventReference(Control, "")); 
     sb.Append(";"); 
     Control.Attributes.Add("onclick", sb.ToString()); 
    } 

這是被搞亂了驗證,因爲它是全球調用驗證。我解決了這個問題通過進行以下更改:

 sb.Append(string.Format("if (Page_ClientValidate({0}) == false) {{ return false; }}}} ", 
      Control.ValidationGroup == string.Empty ? string.Empty : string.Format("\"{0}\"", Control.ValidationGroup))); 

什麼避讓我,當我設置AutoEventWireup爲false,看看會發生什麼。這使得頁面加載事件不會觸發,這是上述擴展方法被調用的地方。這個問題在乾草堆裏有什麼針。

我不怪任何人,不回答,由於缺乏細節,但我會的情況下,任何人都可以使用它保持下去。

編輯:感謝slfan和GBS。我剛剛想出了這個問題,並在回來這裏後我的答案時,我看得出來你們倆基本上是從問題的兩面解決我的問題。頁面加載事件是其中結合物存在的和被稱爲被搞亂了Page_ClientValidate功能擴展方法。既然你們倆在技術上是正確的,我不能授予你們兩個答案,我希望如果我記住我自己的答案在這裏沒有人會不高興。你們兩個絕對擅長用最少的細節和無代碼樣本來分析這些問題。道具。

+0

幾個小時的挫折顯示器衝孔的水平後,我意識到,我們做同樣的事情。 – PhilChuang 2013-01-11 19:48:46

1

AutoEventWireup使ASP.NET自動調用Page_Load事件,而無需註冊到事件。另一種方法是重寫OnLoad方法。當Page_Load未被調用時,您的頁面似乎正常工作。你在這個方法裏面做了什麼?一些奇怪的數據綁定?如果取消註釋此代碼,那麼它會起作用嗎?像這樣,你可以將問題縮小到你沒有在你的問題中顯示的真正問題。

1

兩件事情我會找:

1:代碼隱藏於Page.Validate()的任何顯式調用