好的,
我有一个完全呈现的动态表单(我不知道表单的内容,它通过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>
?但他们看起来完全一样。
希望有人能指出我的方向!
答案 0 :(得分:1)
也许更好的方法是遍历客户端验证器数组(Page_Validators
)并找到要禁用的验证器。
有关详细信息,另请参阅this MSDN page和this codeproject article。
答案 1 :(得分:0)
也许更合适的方法是
ValidatorEnable($("<%= reqAnswer.ClientID %>")[0], false);
使用<%= reqAnswer.ClientID %>
可以避免猜测或硬编码验证器的客户端ID。在jQuery [0]
之后添加$()
获取实际的验证器DOM元素而不是jQuery包装器。