2011-06-05 33 views
2

好形式,加入條件requiredFieldValidators到動態創建在C#asp.net

我有一個完全呈現動態表單(我不知道該表單的內容,它通過一個Web服務提供給我)

我使用asp.net RequiredFieldValidator進行驗證,因爲我在this article中讀到,我們可以動態地開啓和關閉驗證程序,具體取決於字段是否可見,或者不是 和ValidatorEnable(val, enabled)函數。

儘管現在我得到了呈現的表單,但是我遇到了一些麻煩,因爲我不想將它放在aspx文件本身中(不管怎樣,因爲表單是在web服務數據的隱藏代碼中建立起來的......)

所以我查看了clientId,結果驗證器的客戶端ID是它呈現的跨度的id。

所以我試着在firebug中運行這個測試如果我可以啓用/禁用其中一個驗證器,但這似乎是不可能的,一個jQuery span元素沒有一個屬性來啓用它。

ValidatorEnable($("#ContentPlaceHolderDefault_MasterWithNavContent_Poll_4_reqAnswer_373ac8b7_8da9_467b_b9b4_d586e45a7504"), false); 

,並與此

<div class="question-container question-odd" id="ContentPlaceHolderDefault_MasterWithNavContent_Poll_4_question-373ac8b7-8da9-467b-b9b4-d586e45a7504"> 
    <div class="question-meta"> 
     <h3 class="validation-label">Which club have you visited?</h3> 
     <span style="display: block; margin-bottom: 10px; margin-top: 5px;" class="error validation" id="ContentPlaceHolderDefault_MasterWithNavContent_Poll_4_reqAnswer_373ac8b7_8da9_467b_b9b4_d586e45a7504">Please fill out this field.</span> 
    </div> 
    <input type="text" class="answer-container text" id="ContentPlaceHolderDefault_MasterWithNavContent_Poll_4_answer_373ac8b7_8da9_467b_b9b4_d586e45a7504" name="ctl00$ctl00$ctl00$ContentPlaceHolderDefault$MasterWithNavContent$Poll_4$answer_373ac8b7_8da9_467b_b9b4_d586e45a7504"> 
</div> 

推移是否有人知道的HTML,我要去哪裏錯了嗎? 也許我會很快從服務器端ClientId跳轉到RFV呈現的<span>?但他們看起來完全一樣。 希望有人能指出我的好方向!

回答

1

也許更好的方法是循環遍歷客戶端驗證器數組(Page_Validators)並找到您要禁用的驗證器。

另請參閱this MSDN pagethis codeproject article瞭解更多信息。

+0

謝謝,今晚我會檢查一下! – Sander 2011-06-05 14:56:29

+0

對不起,這麼晚了,但這正是我們所做的,它的工作感謝 – Sander 2011-08-09 09:02:11

0

也許更合適的方式來做到這將是

ValidatorEnable($("<%= reqAnswer.ClientID %>")[0], false); 

使用<%= reqAnswer.ClientID %>避免了在或硬編碼驗證的客戶端ID猜測。在jQuery $()獲取實際的驗證器DOM元素而不是jQuery包裝器之後添加[0]

Source for [0]