(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()が正常に機能することはわかっています。
この問題についての助けに感謝します。
ノエル。