Найдите asp:Button в VB.NET

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

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

1
задан abatishchev 14 June 2010 в 12:19
поделиться

4 ответа

Поскольку кнопка находится в шаблоне, вам нужно будет использовать метод FindControl.

Например, если у вас есть разметка вроде этой:

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

Тогда в вашем code-behind вам нужно будет ссылаться на нее так:

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

if (btn != null)
{
     // do whatever you need here
}
2
ответ дан 2 September 2019 в 23:46
поделиться

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

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

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

0
ответ дан 2 September 2019 в 23:46
поделиться

Для справки в будущем (я не пробовал код Нейта) иногда вам нужно искать элементы управления, найденные в .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;
}

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

0
ответ дан 2 September 2019 в 23:46
поделиться

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

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

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

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

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

0
ответ дан 2 September 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: