2015-04-16 81 views
0

我的.aspx:按钮不能访问文本框

<asp:LoginView runat="server"> 
    <RoleGroups> 
     <asp:RoleGroup Roles="admin"> 
      <ContentTemplate> 
       <asp:TextBox ID="TextBox" runat="server"></asp:TextBox> 
       <asp:Button ID="Button" runat="server" Text="Submit" OnClick="Button_Click" /> 
      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
</asp:LoginView> 

我的代码隐藏

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

    } 

    protected void Button_Click(object sender, EventArgs e) 
    { 

     string Mystring = String.Format("{0}", /*I want to put Textbox.text here*/); 

    } 
} 

的问题是,我得到一个“文本框”是不是在目前的背景下定义。我摆弄了一下,发现删除loginview可以恢复我想要的功能。那么为什么loginview会破坏我在跨同一视图的控件中引用的能力?

回答

2

C#区分大小写。而不是名称文本框(b是小写)使用TextBox。另外,我建议您将控件的ID更改为更有意义的内容。不要将文本框的ID设置为“文本框”

除了您的意见,您似乎已将您的TextBox放在LoginView中。我能得到访问这个控制的唯一方法是

Control container = new Control(); 
LoginView1.RoleGroups[0].ContentTemplate.InstantiateIn(container); 
foreach (Control control in container.Controls) 
{ 
    if (control.ID == "txtName") 
    { 
     //Phew. Got your control 
    } 
} 

注:我已经设置一个LoginView ID来LoginView1和TextBox ID来txtName的

+0

纠正案件并没有解决问题。智能感知无法找到文本框。 –

+0

你可以改名为txtName并检查它是否有效? –

+0

试图摆弄几个名字,这就是为什么它目前在这个不具名的名字。只有似乎工作的东西是删除我为了设计原因需要保留的loginview。 –

1

尝试this.TextBox!这应该解决案例敏感的事情!也...坏变量命名...作为一个经验法则,不要命名变量完全像一个类的名字...