2013-03-19 43 views
0

背景:我有一個CompositeControls工具集,用於構建窗體。這些控件本身綁定了一些基本驗證任務的jQuery驗證。使用ASP.NET驗證器驗證複合控件數據

問題:我要讓這些CompositeControls允許開發者使用ASP.NET驗證程序(即RegExValidator,RequiredFieldValidator的,的CustomValidator等)來驗證我的CompositeControls的一個數據更加靈活的驗證。

例子:我希望開發商能夠做到這樣的事情:

<asp:ValidationSummary runat=server HeaderText="There were errors on the page:" /> 

<custom:TextBox id='SomeTextBox' Label='Enter Name Here:' text='' runat='server' /> 

<asp:RequiredFieldValidator runat=server ControlToValidate=SomeTextBox ErrorMessage="Name is required."> * 
</asp:RequiredFieldValidator> 

我已經加入了「ValidationProperty」的複合文本框,但RequiredFieldValidator的(或任何其他國稅發驗證器)似乎無法識別文本框或來自它的數據。文本框(以及我構建的所有其他自定義CompositeControls)都繼承了CompositeControl,並將屬性「ValidationProperty」設置爲公開屬性,該屬性公開該控件的數據元素,並且還包含「字符串ValidationGroup」屬性。

問:有誰知道還有什麼或有什麼具體複合控件需要發揮好與ASP.NET驗證程序(我寧願避免了在複合控件在內的所有驗證類型的實例,當然,除非這是必要的)?

+0

看來,我遇到的實際問題並未與複合控件本身綁定,而是複合控件包含在我開發的自定義包裝控件中。 .net認爲複合控件是包裝控件的子控件,因此不在頁面級別(這就是驗證程序沒有識別它的原因)。 要解決問題,我有控制從WebControl而不是CompositeControl繼承,並實現了IValidator(替代方案也將繼承BaseValidator)。這似乎工作得很好,仍然保持我所尋找的靈活性。 – JakeHova 2013-04-02 14:41:05

回答

1

我最後看着這個在2005年左右,但是從我記得,這裏還有兩個獨立的問題:

  1. 客戶端驗證碼如何發現價值,以驗證
  2. 如何服務器 - 驗證發現值驗證

設置ValidationProperty只會影響服務器端驗證,如果我沒有弄錯。如果還沒有,請在回發後檢查服務器端的驗證器的IsValid屬性是否設置爲false

這可能已經改變了,但我認爲驗證控件也只能驗證具有與他們相同的命名容器的控件。

在客戶端,我有點慚愧,但我認爲情況仍然是驗證腳本將查找一個元素,其中的客戶端ID與被告知要查找的服務器ID相對應,並查找對於value屬性。如果您未在客戶端上公開一個,則無法找到任何要驗證的內容。

如果你有時間,它將有助於很多步驟通過驗證JavaScript。這將教你一個關於如何客戶端驗證如何找到它驗證的值。

希望這會有所幫助。

+0

看來,我遇到的實際問題並未與複合控件本身綁定,而是控件包含在包裝控件中。我認爲ASP.net認爲複合控件不在頁面級別,所以.net驗證器不會識別它。 您使用ValidationProperty裝飾複合控件的解決方案(也很好地知道分配給此裝飾器的屬性必須返回一個不是布爾值的字符串)。來處理驗證。 – JakeHova 2013-04-02 14:35:13