在c#asp.net中添加条件requiredFieldValidators到动态创建的表单

时间:2011-06-05 14:35:13

标签: c# jquery asp.net validation

好的,

我有一个完全呈现的动态表单(我不知道表单的内容,它通过web服务提供给我)

我使用asp.net RequiredFieldValidator进行验证,因为我在this article中读到我们可以根据字段是否可见来动态切换验证器的开启和关闭 使用ValidatorEnable(val, enabled)函数。

虽然现在我得到了渲染的表单,但我在使用这个javascript时遇到了一些麻烦,因为我不想把它放在aspx文件本身中,(不管怎么说都没有控件)表单是在webservice数据的代码隐藏中构建的......)

所以我看了一下clientId,结果证明验证者的客户端ID是它渲染的范围的id。

所以我尝试在firebug中运行它以测试我是否可以启用/禁用其中一个验证器,但这似乎不可能,jQuery span元素没有启用它的属性。

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

以及与此相关的HTML

<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>

有人知道我在哪里出错吗? 也许我要快速从服务器端ClientId跳转到RFV呈现的<span>?但他们看起来完全一样。 希望有人能指出我的方向!

2 个答案:

答案 0 :(得分:1)

也许更好的方法是遍历客户端验证器数组(Page_Validators)并找到要禁用的验证器。

有关详细信息,另请参阅this MSDN pagethis codeproject article

答案 1 :(得分:0)

也许更合适的方法是

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

使用<%= reqAnswer.ClientID %>可以避免猜测或硬编码验证器的客户端ID。在jQuery [0]之后添加$()获取实际的验证器DOM元素而不是jQuery包装器。

Source for [0]