Я пытаюсь кодировать раздел для своего веб-сайта в VB, но VB, может казаться, не находит кнопку. Существует ли путь к коду для нахождения его?
Я знаю, где это. Loginview> Вход в систему> LoginTemplate. Как я заставляю VB.NET указывать на то местоположение?
Поскольку кнопка находится в шаблоне, вам нужно будет использовать метод 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
}
Функция TryCast
в VB.NET является аналогом оператора как
в C #:
Dim btn As Button = TryCast(Me.FindControl("Button1"), Button)
If btn IsNot Nothing Then
' use btn
End If
См. Также этот раздел и этот . Вы уверены, что ищете в текущем активном шаблоне?
Для справки в будущем (я не пробовал код Нейта) иногда вам нужно искать элементы управления, найденные в .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;
}
Я надеюсь, что это наводит на размышления о решении, чтобы действительно найти решение, Мне нужно больше вашего исходного кода.
Вы авторизовались на своем сайте? Если вы не вошли в систему, ваша кнопка не будет отображаться на вашей странице. (Так что вы не сможете найти его с помощью FindControl.)
Код Нейта верен, пока ваш LoginView не находится внутри другого контейнера (например, главной страницы или заполнителя.)
Dim btn As Button = Ctype (loginview1.FindControl ("btn1"), Button)
Если это не сработает, добавьте trace = "true" в директиву вашей страницы. Перезагрузите страницу и посмотрите внизу в разделе «Дерево управления». Вы должны увидеть такую строку:
loginview1 $ btn1 System.Web.UI.WebControls.Button