以下嵌入在aspx文件中的.NET 3.5代码会在加载页面时触发JavaScript错误(对于启用了JavaScript的用户):
<noscript>
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server"
ControlToValidate="txt"></asp:RequiredFieldValidator>
<asp:Button ID="btn" runat="server" Text="Button" />
</noscript>
发生此错误是因为ASP.NET验证程序控件生成的JavaScript在下面的第二个代码行之前不包含空检查:
var ctl00_body_txt_RequiredFieldValidator =
document.all ?
document.all["ctl00_body_txt_RequiredFieldValidator"] :
document.getElementById("ctl00_body_txt_RequiredFieldValidator");
ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";
有人可以建议解决这个问题吗?
<小时/> 脚注:为什么我这样做?对于我的非JavaScript用户,我将使用一些需要验证的不同UI组件替换某些AJAX功能。
答案 0 :(得分:2)
您应该将以下内容添加到RequiredFieldValidator:
enableclientscript="false"
看到你在&lt; noscript&gt;中使用它们标签,没有必要提供控件的客户端vaildation - 它们只会在JS关闭时显示。
这将强制验证在服务器端(自动)发生。
请务必在处理回复之前致电“Page.IsValid”。
有关详细信息,请参阅BaseValidator.EnableClientScript。
答案 1 :(得分:0)
javascript正在寻找noscript中包含的元素? AFAIK没有从服务器端检测脚本支持的干净方法。
我认为你需要构建一个重定向(我已经看到这样做,如果你不介意验证失败,在标题noscript中使用元刷新完成)将noscript用户推送到“please turncript on页面“或做一些手术以放松验证/控制绑定,这可能需要一些轮子重新发明。这是asp.net在控制器和视图之间紧密耦合的区域之一。