0

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

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

一些额外的信息:

复合控件是一个下拉列表和“加载器图像”,因为它是一个启用 ajax 的下拉列表(使用 ICallbackEventHandler)。我知道客户端 javascript 正在写入页面,并在验证器函数中放置了一个 alert('random message') 作为第一行,仅在验证文本框时出现(即在验证时不显示我的自定义控件)

语言: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() 工作正常。

我很感激在这个问题上的任何帮助。

诺埃尔。

4

1 回答 1

0

尝试使用 CustomValidator 而不是 BaseValidator:

http://msdn.microsoft.com/en-us/library/9eee01cx(VS.71).aspx

并设置 ClientValidationFunction 以确保调用您的 JS:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction.aspx

于 2009-02-25T15:16:22.183 回答