在下面的.NET 3.5代码,放置在一个aspx文件,将触发当页面被加载(启用了谁的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功能。

有帮助吗?

解决方案

您应该添加下列到的RequiredFieldValidator:

enableclientscript="false"

看到如要在

这将迫使验证发生(自动地)在服务器端为您服务。

只要确保你所说的“页.IsValid ”你处理响应之前。

请参阅 BaseValidator.EnableClientScript 的更多细节。

其他提示

在JavaScript是寻找包含在无脚本的元素? AFAIK有没有干净的方式来检测从服务器端脚本支持。

我想你会需要建立一个重定向(我已经看到了这个在报头中的元刷新完成无脚本,如果你不介意验证失败),以无脚本的用户推到了“请turnscript上页面”或做一些手术,放松验证/控制绑定,以便可采取轮重塑的一些量。这是控制器和视图之间asp.net的紧耦合真惩罚那些区域中的一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top