2010-06-14 146 views
1

我想在VB中为我的网站编写一段代码,但VB似乎无法找到一个按钮。代码有找到它的方法吗?在VB.NET中找到一个asp:按钮

我知道它在哪里。 Loginview>登录> LoginTemplate。如何让VB.NET指向那个位置?

回答

2

由于该按钮位于模板中,因此您需要使用FindControl方法。

例如,如果您有类似这样的标记:

<asp:LoginView ID="loginview1" runat="server"> 
     <LoggedInTemplate> 
      <asp:Button ID="btn1" runat="server" /> 
     </LoggedInTemplate> 
    </asp:LoginView> 

然后,在你的后台代码,你需要像这样引用它:

Button btn = loginview1.FindControl("btn1") as Button; 

if (btn != null) 
{ 
    // do whatever you need here 
} 
+0

不好意思,刚才意识到你正在使用VB;我列出的代码是用于C#的,因此会有一些语法更改。 – 2010-06-14 12:08:34

+0

你知道更改吗?我不确定如何切换到VB。 它更像是logintemplate在 BioXhazard 2010-06-14 12:17:09

+0

里面不,它仍然找不到控件。 – BioXhazard 2010-06-14 12:21:22

0

只是以备将来参考,(我没有尝试Nate的代码)有时你必须搜索.Parent中找到的控件,特别是当试图在容器中查找控件时,或者更糟糕的是,在容器中,在容器中,在容器中等等时。

或搜索子.Controls,因为第二次阅读我不知道这是一个父位置或正在搜索控件的子位置。如果你在ascx中,通常你正在寻找父母,如果你在一个页面中,一般你正在寻找孩子。

这里是自动代码转换器:http://converter.telerik.com/为C#到VB.NET

private static Control FindControl(Control container,string id) 
{ 
    if (container.FindControl(id) != null) 
     return container.FindControl(id); 
    foreach (Control possibility in container.Controls) 
    { 
     if (container.FindControl(id) != null) 
      return container.FindControl(id); 
     if(possibility.Controls.Count>0) 
     { 
      Control childPossibility = FindControl(possibility, id); 
      if (childPossibility != null) 
       return childPossibility; 
     } 
    } 
    //throw new InvalidOperationException("Couldn't find it!"); 
    return null; 
} 

我希望这是暗示的解决方案的,要真正钉一个解决方案,我需要更多的源代码。在VB.NET

+0

那么如果Nate的代码不起作用,你建议我怎么做?因为它不。 – BioXhazard 2010-06-14 12:23:39

0

TryCast功能是操作者as在C#模拟:

Dim btn As Button = TryCast(Me.FindControl("Button1"), Button) 
If btn IsNot Nothing Then 
    ' use btn 
End If 

参见this topicthis。那么你确定你正在搜索当前的活动模板吗?

+0

我从这里得到一个错误。 投射算子中的语法错误;需要用逗号分隔的两个参数。 – BioXhazard 2010-06-14 12:26:21

+0

@Andrew:忘记了第一行中的支架 – abatishchev 2010-06-14 12:27:40

+0

我调试了代码以停止并显示该行的值。 btn =无。所以它仍然没有找到控制。 – BioXhazard 2010-06-14 12:32:43

0

您是否在您的网站上登录过?如果您未登录,您的按钮将不会呈现在您的页面上。 (所以你将不能够使用的FindControl找到它。)

Nate的代码是正确的,只要你的LoginView不是另一个容器内(如母版页或一个占位符。)

暗淡BTN As Button = Ctype(loginview1.FindControl(“btn1”),Button)

如果这不起作用,请在页面指令中添加trace =“true”。重新加载页面并查看控制树下的底部。你应该看到这样一行:

loginview1 $ BTN1 System.Web.UI.WebControls.Button