<noscript>中的Validator导致JavaScript错误</noscript>

时间:2009-02-16 12:32:35

标签: asp.net javascript validation graceful-degradation noscript

以下嵌入在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功能。

2 个答案:

答案 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在控制器和视图之间紧密耦合的区域之一。