2012-03-07 1 views
0

私は、バリデータ付きいくつかのテキストボックスを含むカスタムのUserControlを持っています。対応するバリデーターを持つ1つのTextBoxは、CheckBoxに基づいてオプションです。擬似:UserControl条件付き検証アプローチですか?

マイControl.ascx

<asp:TextBox id="txtAddress" /> 
<asp:Validator id="valAddress" /> 

<asp:CheckBox id="condition" /> 
<asp:TextBox id="txtConditional" /> 
<asp:Validator id="valConditional" ValidationGroup="ConditionalGroup" /> 

マイControl.ascx.cs

public void Validate() { 
    if(condition.Checked) { 
     Page.Validate("ConditionalGroup"); 
    } 
} 

また、私は基本的にはこのようになりますページを持っていますPage.aspx

<my:Control id="myControl" /> 

<asp:Button onClick="doPost" /> 

Page.aspx.cs

protected void doPost(object sender, EventArgs e) { 
    myControl.Validate(); //This feels wrong 

    if(Page.IsValid) { 
     //go 
    } 
} 

このすべての作品は、しかし、私はPage.aspx.csの外にmyControl.Validate()ラインを取り、My Control.ascx.csに入れたいと思います。 conditionalチェックボックスの値は常にfalseであるため、コントロールのPage_Loadに配置することは選択できません。Page_LoaddoPostクリックハンドラが発射される前...

それは、私はそれがどこかUserControlで属すべきだと思うPageにカスタムにValidate関数を呼び出すために、間違った感じの後使用可能なイベントはありません。これが構造的に間違っているのは本当ですか?イベントハンドラを使用して、このための別のソリューションがありますか?

+0

子コントロールのイベントは、ページの後に実行されます(例外は初期段階です)。したがって、コントロールのpage_loadイベントは、ページのpage_loadの後で、ページのコントロールイベント(たとえば、doPost)の前にあります。注:これはあなたの特定の問題に役立つわけではありません。 – rkw

+0

チェックアウト:[UserControlを検証する方法](http://izlooite.blogspot.com/2010/07/how-to-validate-user-control.html) –

答えて

2

ユーザーがチェックボックスをオンにした場合にのみ、バリデータを有効にすることができます。チェックを外すと、バリデータは無効になります。これは、ユーザーコントロールで行う必要があります。これは、クライアント側またはサーバー側で実行できます。このようにして、ページはそのページで有効になっているすべてのバリデータを検証します。