用户创建的Validator不会在“复杂”用户控件上调用客户端验证Javascript

时间:2009-02-25 14:42:21

标签: asp.net-2.0 client-side validation

我已经创建了一个用户控件(来自System.Web.UI.UserControl),并为用户控件创建了自己的验证器(来自System.Web.UI.WebControls.BaseValidator)。一切正常,直到我尝试让用户控件进行客户端验证。

在尝试调试此问题时,我已将“Control to Validate”设置为文本框而不是自定义用户控件,并且客户端脚本工作正常!在我看来,我创建的复合用户控件存在问题。有没有人遇到过这个问题?有没有其他人看到客户端验证在自定义用户控件上失败?

一些额外信息:

复合控件是一个下拉列表和'加载器图像',因为它是一个启用了ajax的下拉列表(使用ICallbackEventHandler)。我知道客户端javascript正在写入页面,并且已经发出警报(“随机消息”)作为验证器函数中的第一行,只有在验证文本框时才会出现(即不是在验证时)我的自定义控件)

语言:C#(ASP.NET 2.0)和jQuery 1.2.6

在aspx文件中:

<rms:UserDDL ID="ddlUserTypes" runat="server" PreLoad="true" />
<rms:DDLValidator 
        ID="userTypesVal"
        ControlToValidate="ddlUserTypes"
        ErrorMessage="You have not selected a UserType"
        runat="server"
        Text="You have not selected a UserType"
        Display="Dynamic"
        EnableClientScript="true" />

中的验证码中的

protected string ScriptBlock
        {
            get
            {
                string nl = System.Environment.NewLine;
                return
                    "<script type=\"text/javascript\">" + nl +
                    "   function " + ScriptBlockFunctionName + "(ctrl)" + nl +
                    "   {" + nl +
                    "       alert('Random message'); " + nl +
                    "       var selVal = $('#' + ctrl.controltovalidate).val(); " + nl +

                    "       alert(selVal);" + nl +
                    "      if (selVal === '-1') return false;  " + nl +
                    "      return false;  " + nl +
                    "   }" + nl +
                    "</script>";
            }
        }

    protected override void OnPreRender(EventArgs e)
    {
        if (this.DetermineRenderUplevel() && this.EnableClientScript)
        {
            Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", this.ScriptBlockFunctionName);
            Page.ClientScript.RegisterClientScriptBlock(GetType(), this.ScriptBlockKey, this.ScriptBlock);
        }

        base.OnPreRender(e);
    }

我知道我的ControlPropertiesValid()和EvaluateIsValid()工作正常。

我对此问题表示感谢。

诺尔。

1 个答案:

答案 0 :(得分:0)