Найти кнопку asp: в VB.NET - PullRequest
1 голос
/ 14 июня 2010

Я пытаюсь закодировать раздел для моего сайта в VB, но VB не может найти кнопку. Есть ли способ для кода найти его?

Я знаю, где это. Loginview> Login> LoginTemplate. Как мне заставить VB.NET указывать на это местоположение?

Ответы [ 4 ]

2 голосов
/ 14 июня 2010

Поскольку кнопка находится в шаблоне, вам необходимо использовать метод 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 голосов
/ 17 июня 2010

Вы вошли на свой сайт?Если вы не вошли в систему, ваша кнопка не будет отображаться на вашей странице.(Так что вы не сможете найти его с помощью FindControl.)

Код Нейта верен, если ваш LoginView не находится внутри другого контейнера (например, главной страницы или заполнителя).

Dim btn As Button = Ctype (loginview1.FindControl ("btn1"), Button)

Если это не сработает, добавьте trace = "true" в директиву вашей страницы.Перезагрузите страницу и посмотрите внизу под деревом управления.Вы должны увидеть строку вроде:

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

0 голосов
/ 14 июня 2010

TryCast функция в VB.NET является аналогом оператора as в C #:

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

См. Также эту тему и эту .Так вы уверены, что ищете в текущем, активном шаблоне?

0 голосов
/ 14 июня 2010

Просто для справки в будущем (я не пробовал код Нейта) иногда вам приходится искать элементы управления, найденные в .Parent, особенно при попытке найти элементы управления в контейнере или, что еще хуже, в контейнере, в контейнере, в контейнере и т. д.

или поиск дочерний. Контроль, потому что при втором чтении я не могу сказать, является ли это родительское местоположение или дочернее местоположение, которое ищет элемент управления.Если вы в 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;
}

Я надеюсь, что это наводит на мысль о решении, чтобы действительно найти решение, мне понадобится больше вашего исходного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...