0

(System.Web.UI.UserControlから)ユーザーコントロールを作成し、(System.Web.UI.WebControls.BaseValidatorから)ユーザーコントロール用の独自のバリデーターを作成しました。ユーザーコントロールにクライアント側の検証を実行させるまでは、すべて問題なく動作します。

この問題をデバッグしようとしているときに、カスタムユーザーコントロールではなく、[コントロールを検証する]をテキストボックスに設定しました。クライアント側のスクリプトは正常に機能します。作成した複合ユーザーコントロールに問題があるように見えます。誰かが以前にこの問題に遭遇したことがありますか?カスタムユーザーコントロールでクライアント側の検証が失敗するのを見た人はいますか?

いくつかの追加情報:

複合コントロールは、(ICallbackEventHandlerを使用して)ajax対応のドロップダウンリストであるため、ドロップダウンリストと「ローダーイメージ」です。クライアント側の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

BaseValidator の代わりに CustomValidator を使用してみてください。

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 に答える