ASP.NETでは、検証コントロール(RequiredFieldValidator
)を使用すると、クライアント側のフレームワークはJS関数Page_ClientValidate
を実行します。この関数は、(指定されたValidationGroup
の)ページ上のすべてのコントロールを検証し、バリデータコントロールのspan
タグのDOM要素のパラメータでJS関数ValidatorUpdateDisplay
を呼び出します。最初にUpdatePanelでポストバックにコントロール/バリデータがロードされたときに、カスタムValidatorUpdateDisplay関数を使用する方法はありますか?
ValidatorUpdateDisplay
は、検証結果に応じてspan
タグの表示を切り替えます。
Webアプリケーションでは、妥当性検証のシナリオ(つまり、コントロールの周りに赤い枠線が表示され、最初に失敗したコントロールのポップオーバーを表示してスクロールする機能)をより多く提供するために、ValidatorUpdateDisplay
機能をオーバーライドしました。
これは、UpdatePanelでのポストバック後に初めてコントロール(送信ボタンを含む)が表示されるまでうまく動作します。 pContent
を表示するには、最初のロード・プレスbShow
後
<asp:ScriptManager runat="server" />
<asp:UpdatePanel ID="upTest" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="bShow" runat="server" UseSubmitBehavior="false" Text="SHOW" OnClick="bShow_Click" />
<asp:Panel ID="pContent" runat="server" Visible="false">
<asp:TextBox ID="tbTest" runat="server" />
<asp:RequiredFieldValidator ID="rfvTest" runat="server" ControlToValidate="tbTest" Text="Not valid" />
<asp:Button ID="bTest" runat="server" UseSubmitBehavior="false" Text="TEST" />
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript">
function ValidatorUpdateDisplay(val) {
debugger; // this will not be reached
}
</script>
protected void bShow_Click(object sender, EventArgs e)
{
this.pContent.Visible = true;
}
。 tbTest.Text
を空のままにして、bTest
を押すと、オーバーライドされたが入力されますが、フレームワークの機能に入り、rfvTest
から「無効」と表示されます。
あなたはtrue
にpContent.Visible
を変更し、初期ロード後bTest
を押すと所望の効果が発生します:それはカスタムValidatorUpdateDisplay
関数を入力し、「無効です」と表示されません。
ボタンbTest
をUpdatePanel
から移動すると、問題は解決しません。
どうすればUpdatePanel
の内部で動作させることができますか?