首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET自定义验证器客户端和服务器端验证未触发

ASP.NET自定义验证器客户端和服务器端验证未触发
EN

Stack Overflow用户
提问于 2009-03-31 13:44:09
回答 7查看 257.9K关注 0票数 74

我以前没有遇到过这种情况,但是出于某种原因,客户端和服务器端的验证事件都没有被触发:

代码语言:javascript
复制
<asp:TextBox ID="TextBoxDTownCity" runat="server" CssClass="contactfield" />
<asp:CustomValidator ID="CustomValidator2" runat="server" EnableClientScript="true"
    ErrorMessage="Delivery Town or City required"
    ClientValidationFunction="TextBoxDTownCityClient" 
    ControlToValidate="TextBoxDTownCity"
    OnServerValidate="TextBoxDTownCity_Validate" Display="Dynamic" >
</asp:CustomValidator>

服务器端验证事件:

代码语言:javascript
复制
protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args)
{
    args.IsValid = false;
}

客户端验证事件:

代码语言:javascript
复制
function TextBoxDCountyClient(sender, args) {
    args.IsValid = false;
    alert("test");
}

我以为至少会触发服务器端验证,但没有。这在我身上从来没有发生过。这真的把我难倒了。

我查看了输出,ASP.NET正在识别客户端功能:

ASP.NET JavaScript输出:

代码语言:javascript
复制
var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2");

ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity";

ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required";

ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic";

ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid";

ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient";

呈现的自定义验证器:

代码语言:javascript
复制
<span id="ctl00_ctl00_content_content_CustomValidator2" style="color:Red;display:none;">Delivery Town or City required</span> 

有谁能解释一下为什么客户端和服务器端的验证都不会触发。

编辑:拼写错误我粘贴了错误的函数,问题仍然是相同的

只是对上一条注释的另一个更新: where by TextBox不能为空。我对此进行了测试,但这不是真的。在空白页面上,CustomValidator在没有值的情况下正常触发了客户端验证函数:

代码语言:javascript
复制
<asp:TextBox ID="TextBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" 
ErrorMessage="CustomValidator" ClientValidationFunction="TextBoxDAddress1Client"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-03-31 14:02:38

您的CustomValidator只有在TextBox不为空时才会触发。

如果你需要确保它不是空的,那么你也需要一个RequiredFieldValidator

If the input control is empty, no validation functions are called and validation succeeds. Use a RequiredFieldValidator control to require the user to enter data in the input control.

编辑:

如果您的CustomValidator指定了ControlToValidate属性(您的原始示例也指定了),那么仅当控件不为空时才会调用您的验证函数。

如果你不指定ControlToValidate,那么你的验证函数每次都会被调用。

这为这个问题开辟了第二种可能的解决方案。您可以从CustomValidator中省略ControlToValidate属性,并设置验证函数来执行以下操作,而不是使用单独的RequiredFieldValidator

客户端代码(Javascript):

代码语言:javascript
复制
function TextBoxDCountyClient(sender, args) {
    var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value;
    if (v == '') {
        args.IsValid = false;  // field is empty
    }
    else {
        // do your other validation tests here...
    }
}

服务器端代码(C#):

代码语言:javascript
复制
protected void TextBoxDTownCity_Validate(
    object source, ServerValidateEventArgs args)
{
    string v = TextBoxDTownCity.Text;
    if (v == string.Empty)
    {
        args.IsValid = false;  // field is empty
    }
    else
    {
        // do your other validation tests here...
    }
}
票数 114
EN

Stack Overflow用户

发布于 2010-08-25 19:05:07

使用以下命令:

代码语言:javascript
复制
<asp:CustomValidator runat="server" id="vld" ValidateEmptyText="true"/>

若要验证空字段,请执行以下操作。

你不需要添加2个验证器!

票数 133
EN

Stack Overflow用户

发布于 2009-04-15 21:56:10

客户端验证根本没有在我的web表单上执行,我也不知道为什么。原来问题是javascript函数的名称与服务器控件ID相同。

所以你不能这么做。

代码语言:javascript
复制
<script>
  function vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="vld" />

但这是可行的:

代码语言:javascript
复制
<script>
  function validate_vld(sender, args) { args.IsValid = true; }
</script>
<asp:CustomValidator runat="server" id="vld" ClientValidationFunction="validate_vld" />

我猜它与内部的.NET Javascript冲突?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/701029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档