2011-01-28 8 views
3

私は、いくつかのエクストラを持つTextBoxで構成されたUser Controlを持っていますが、この例では単純なTextBoxで十分であると仮定しています。私はWebフォームからこのUser Controlを呼び出しており、基本的にはWebフォーム上のTextBoxで使用した場合と同じように機能するRequiredFieldValidatorを使用できるようにしたいと考えています。これを処理するユーザーコントロールを構成するにはどうすればよいですか?ユーザーコントロール内のRequiredFieldValidatorの処理

EDIT:

DatePicker.ascx

<asp:TextBox runat="server" ID="myControlTB"> 

DatePicker.ascx.cs

[ValidationProperty("Text")] 
public partial class DatePicker : System.Web.UI.UserControl 
{ 
    public String Text { get { return myControlTB.Text; } set { myControlTB.Text = value; } } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

WebForm.aspx

<cu:UserControl runat="server" ID="myControl"> 
<asp:RequiredFieldValidator runat="server" errormessage="This is a required field." ControlToValidate="myControl"> 
<asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" /> 

WebForm.aspx.csあなたはユーザーコントロールにプロパティを追加します

[ValidationProperty("Text")] 
public partial class Control 
{ 
    public string Text 
    { 
     get { return textbox.Text;} 
    } 

} 
+0

これは私がプロパティにセットを持たないことと私のバリデーターが最初に現れることを除いて私と似ています。また、私の作業コードでは、Page.Validate()を使用して手動で検証し、Page.IsValidをチェックします。あなたの必要条件ではないかもしれませんが、検証が必要なイベントやメソッドを呼び出すときに、このように機能するかどうかチェックする価値があります。 –

+0

それはショットを与えたが、運はない:/とにかく感謝。 – Kyle

+0

hmmm、私はPage.Validate()をPage_Loadメソッドに配置すれば十分です。これはうまくいきます。残念ながら、これはクライアント側の検証には役立ちません。 – Kyle

答えて

3

public string TextBoxID 
{ 
    get { return myControlTB.ClientID; } 
} 

そして検証コントロールのために、プログラマブルコードからそれを設定します。

void Page_Load(..) 
{ 
    this.rfv.ControlToValidate = this.uc.TextBoxID; 
} 

実際にこのように動作するかどうかわかりませんが、UniqueIDまたはIDを直接試してみて、違いがあるかどうかを確認することもできます。

いずれか、またはTextBoxIDをTextboxTextに変更してmyControlTB.Textを返し、コントロールに[ValidationProperty( "TextBoxText")]を追加し、必要なフィールドバリデータのControlToValidateをユーザーコントロールに設定します。

HTHのいずれかを試してください。

+0

貧しい人には聞こえませんが、例を挙げることはできますか? – Kyle

+0

ありがとうございますが、これは動作しません。例外はありませんが、requiredfieldvalidatorはテキストボックスが空であることを正しく認識しません。 – Kyle

+0

申し訳ありませんが、私はこれをしてからしばらくしています。それをテストして戻ってきてください。あなたは@ Brianの最初の例を試しましたか? –

0

コントロールプロパティとしてコントロールにValidationProperty属性を設定し、テキストボックスのTextプロパティを公開する必要があるだろう

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    Page.Validate(); 
    if (Page.IsValid) 
    { 
     // e-mail the form 
    } 
+0

助けてくれてありがとう。方法1はあまり効果がありません。 IDプロパティ(UniqueID、ClientID、ID)のいずれも正しいIDを取得していないようです。RequiredFieldValidatorがコントロールを見つけることができないという例外が表示されます。方法2は@Paulが言及したのと同じですが、私はそれを動かすことができませんでした。 – Kyle

関連する問題