必填字段验证器未触发

时间:2008-11-04 06:14:38

标签: asp.net

我遇到了一个带有TextBox和RequiredFieldValidator的标准ASP.NET页面的问题。重现的步骤非常简单:

  1. 在页面上放置TextBox
  2. 在页面上放置RequiredFieldValidator
  3. 将RequiredFieldValidator指向TextBox
  4. 运行应用
  5. Tab键远离TextBox,RequiredFieldValidator不显示
  6. 输入文字,然后删除文本和那些标签,RequiredFieldValidator确实显示
  7. 在回发后,RequiredFieldValidator在两种情况下都能正常工作,但似乎客户端代码在文本框中输入(然后删除)之前不会触发。

    有没有人有解决方案,而不是自己乱砍JavaScript?

7 个答案:

答案 0 :(得分:4)

在用户输入之前,这种行为是否可能会抑制验证控件的出现?

一般来说,只要单击一个将CausesValidation设置为true的控件(如提交按钮),就会调用Validate()。

在任何情况下,糟糕的人都可以解决,你可以从Load事件处理程序中调用页面Validate()函数。这样可以更清楚地指出满意的用户,他们需要输入内容。例如,

protected void Page_Load(object sender, EventArgs e)
{
    Validate();
}

答案 1 :(得分:4)

我之前回答的后续行动:

验证发生在onchange事件中,而不是onblur。当焦点丢失且控制值发生变化时,onchange将触发。

要在onblur事件中触发验证,我在Page_Load()中添加了以下代码:

ScriptManager.RegisterStartupScript(this, GetType(), "js" + myTextBox.ClientID,
  "ValidatorHookupEvent(document.getElementById(\"" + myTextBox.ClientID + 
  "\"), \"onblur\", \"ValidatorOnChange(event);\");", true);

适用于ASP.Net 2。

答案 2 :(得分:3)

您可能在此处创建了可用性问题。如果您在模糊上验证必填字段,则用户将获得大量“必填字段”错误,因为他正在浏览字段。

答案 3 :(得分:2)

您是否将EnableClientScript属性/属性设置为true? 你有文本框的默认值吗?如果是这样,您需要将InitialValue属性设置为该默认值

答案 4 :(得分:0)

表单可以包含多个验证组。 AFAIK验证仅通过回发触发,激活相应验证器组的验证器。只有在回发后,验证器才会添加其客户端Javascript验证码。

答案 5 :(得分:0)

这就是验证器如何工作,除非有输入验证或有回发,否则它们不会触发。如果你想让它发生,你必须自己进行验证。

我不知道您需要的确切代码,但它与处理onblur和覆盖评估函数有关:

function blurred(sender) {
    var validator = sender.Validators[0]
    validator.evaluationfunction(validator);
}

并在文本框中:

<asp:TextBox runat="server" ID="txt" onBlur="blurred(this)"></asp:TextBox>

答案 6 :(得分:0)

我有同样的问题。发现您需要向脚本管理器添加一些框架脚本引用。确保脚本管理器中至少包含带有“script”标记的脚本引用。

    <asp:ScriptManager ID="ScriptManager1" runat="server" ValidateRequestMode="Enabled" >
        <Scripts>
        <%--Framework Scripts--%>
        <%--<asp:ScriptReference Name="MsAjaxBundle"  />--%>
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="jquery.ui.combined" />
        <asp:ScriptReference Name="WebForms.js"  Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js"  Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>

    </Scripts>
    </asp:ScriptManager>

在创建webforms应用程序时,您也可以在.Net创建的默认母版页中找到它们。