【问题标题】:Validator in <noscript> causes JavaScript error<noscript> 中的验证器导致 JavaScript 错误
【发布时间】:2009-02-16 12:32:35
【问题描述】:

以下 .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 用户,我将一些 AJAX 功能替换为一些需要验证的不同 UI 组件。

【问题讨论】:

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


    【解决方案1】:

    您应该将以下内容添加到RequiredFieldValidator:

    enableclientscript="false"
    

    当您在

    【讨论】:

      【解决方案2】:

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

      我认为您需要构建一个重定向(如果您不介意验证失败,我已经看到在标头 noscript 中使用元刷新完成此操作)以将 noscript 用户推送到“请打开脚本page”或做一些手术来放松验证/控制绑定,这可能需要重新发明一些轮子。这是 asp.net 控制器和视图之间的紧密耦合真正受到惩罚的领域之一。

      【讨论】:

        猜你喜欢
        • 2013-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 2013-02-04
        相关资源
        最近更新 更多