-
23-08-2019 - |
题
在下面的.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的紧耦合真惩罚那些区域中的一个。
不隶属于 StackOverflow