2016-09-01 5 views
1

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から「無効」と表示されます。

あなたはtruepContent.Visibleを変更し、初期ロード後bTestを押すと所望の効果が発生します:それはカスタムValidatorUpdateDisplay関数を入力し、「無効です」と表示されません。

ボタンbTestUpdatePanelから移動すると、問題は解決しません。

どうすればUpdatePanelの内部で動作させることができますか?

答えて

1

ASP.NETは、最初に必要なときにValidatorUpdateDisplay関数を挿入するために遅延読み込み方法を使用します。したがって、私の例では、UpdatePanelのポストバック後に関数を読み込みます。

これは、ValidatorUpdateDisplay関数の独自の実装よりも優先されます。これは、ページの最後に関数が挿入されているためです。私はクリーンな解決策があったことを望む

<asp:CustomValidator runat="server" /> 

は汚い回避策はありますが、私は常に有効である初期負荷に空CustomValidatorを挿入します。

関連する問題