私は、バリデータ付きいくつかのテキストボックスを含むカスタムの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_Load
とdoPost
クリックハンドラが発射される前...
それは、私はそれがどこかUserControl
で属すべきだと思うPage
にカスタムにValidate
関数を呼び出すために、間違った感じの後使用可能なイベントはありません。これが構造的に間違っているのは本当ですか?イベントハンドラを使用して、このための別のソリューションがありますか?
子コントロールのイベントは、ページの後に実行されます(例外は初期段階です)。したがって、コントロールのpage_loadイベントは、ページのpage_loadの後で、ページのコントロールイベント(たとえば、doPost)の前にあります。注:これはあなたの特定の問題に役立つわけではありません。 – rkw
チェックアウト:[UserControlを検証する方法](http://izlooite.blogspot.com/2010/07/how-to-validate-user-control.html) –