2009-07-14 11 views
2

私はここで厄介な問題を抱えています。CreateUserWizardコントロールにあるときに、IDでTextBoxを参照できないのはなぜですか?

asp.net CreateUserWizardの中にいくつかの要素がありますが、コードビハインドからそれらにアクセスできないようです。

ここでコードスニペットです:

マークアップ:

public partial class CreateUserWizard : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void CreatingUser(object sender, EventArgs e) 
    { 
     Name. //no intellisense and compiler error when I try to access Name 
    } 
} 

べきではありません。この作品:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CreateUserWizard.ascx.cs" Inherits="Web.UserControls.CreateUserWizard" %> 
<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" OnCreatingUser="CreatingUser"> 
<WizardSteps> 
    <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server"> 
     <ContentTemplate> 
      <table border="0"> 
       <tr> 
        <td> 
         <span class="requiredField"/> 
         <asp:Label ID="NameLabel" runat="server" AssociatedControlID="NameRequiredFieldValidator">Navn:</asp:Label>      
         <asp:CheckBox ID="ShareInfoCheckBox" runat="server" Checked="True" Text="Share my information with partner sites." /> 
        </td> 
        <td> 
         <asp:TextBox ID="Name" runat="server"></asp:TextBox> 
         <asp:RequiredFieldValidator ID="NameRequiredFieldValidator" runat="server" 
          ControlToValidate="Name" ErrorMessage="Du skal indtaste dit navn" 
          ToolTip="Du skal indtaste dit navn" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator> 
        </td> 
       </tr> 
      </ContentTemplate> 
    </asp:CreateUserWizardStep> 
</WizardSteps> 
</asp:CreateUserWizard> 

...そして、ここでは、分離コードですか?何か違いがあれば、それはUserControlの中にあります。事前

答えて

10
TextBox nameTextBox = 
    CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Name") as TextBox; 

if (nameTextBox != null) { 
    /* Do your stuff */ 
} 

その他の例here

+1

私は、 "as TextBox"表記法よりも例外をスローする可能性が低い –

0

おかげで「名前」どこかで、メンバ変数、またはプロパティと呼ばれる何か他のものはありますか?コントロールに "Navn"のようなあまり一般的でない名前や、競合する可能性の低いものを与えるようにしてください。この理由は、あなたのテキストボックスが別のオブジェクトの内部にあるということですので、あなたが直接アクセスカント

((TextBox)CreateUserWizardStep1.FindControl("Name")).Text = "Hello"; 

3

はこれを試してみてください。

0

Sean Brightは、どうやってそれに到達するかについて正しい考えを持っています。

"これはテンプレート化されたコントロールなので、アクセスしようとしているアイテムは別のネーミングコンテナ内に存在します。 Control.FindControl関数を使用すると、必要なコントロールにアクセスできます。

This is a good article that explains templated controls.

またはこのウィザード制御のための他の定義済みフィールドの場合には、あなたはそれらの値にアクセスするためにCreateUserWizard1.UserName /メール/パスワードなどを使用することができます。

関連する問題