1

以下.NET 3.5的代码,放置在一个aspx文件,当页面加载(用于启用谁JavaScript的用户)将触发JavaScript错误:验证在<noscript>导致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

您应该添加下列到的RequiredFieldValidator:

enableclientscript="false" 

看到,因为你是在<无脚本>标签使用这些,还有在供应控制的客户端vaildation没有一点 - 他们只打算显示JS是否关闭。

这将强制验证在服务器端为您自动发生。

只要确保在处理响应之前调用“Page.IsValid”。

查看BaseValidator.EnableClientScript了解更多详情。

0

javascript正在寻找包含在noscript中的元素? AFAIK没有干净的方式来检测服务器端的脚本支持。

我认为你需要建立一个重定向(如果你不介意验证失败,我已经看到这在一个标题无脚本中的元刷新完成),以推动无脚本用户“在页面上“或做一些手术来放松验证/控制绑定,这可能需要一定量的车轮重新发明。这是asp.net控制器和视图之间紧密耦合真正受到惩罚的领域之一。