我遇到了一个带有TextBox和RequiredFieldValidator的标准ASP.NET页面的问题。重现的步骤非常简单:
在回发后,RequiredFieldValidator在两种情况下都能正常工作,但似乎客户端代码在文本框中输入(然后删除)之前不会触发。
有没有人有解决方案,而不是自己乱砍JavaScript?
答案 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创建的默认母版页中找到它们。