не может получить доступ к элементам управления в приложении asp.net - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над веб-приложением ASP.NET VB.NET.Я унаследовал кучу форм от другого приложения, которое мы имеем в доме.Я сталкиваюсь с очень странной проблемой при работе на странице входа.

Это сокращенная версия моего кода:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
  <table> 
    <tr> 
      <td>
          <span id="Span1" runat="Server" style="Color: Red"></span>
      </td>
    </tr>
    <tr>
      <td>
        <asp:Login ID="Login1" runat="server">
         <LayoutTemplate>
           <table>
           <tr>
             <td> 
                <span id="Span1" runat="Server" style="Color: Red"></span>
             </td>
           </tr>
           </table>
          </LayoutTemplate>
       </asp:login>
     </td>
    </tr>
   </table>
</asp:Content>

У меня есть <span id="span1">, который находится внутри моей веб-формы в пределах части Content страницы.Я могу легко получить доступ к этому в моем CodeBehind и делать с ним все, что захочу.Однако, если я переместу этот промежуток и поместу его внутри <asp:login> части страницы, он, похоже, не распознает его, он не даст мне доступ к нему в коде позади, он даст мне волнистую синюю линию и говорит:

span1 не объявлено.Он может быть недоступен из-за уровня защиты

Этот бит находится в верхней части веб-формы в конструкторе

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Login.aspx.vb" Inherits="_Default" MasterPageFile="~/Site.master" %>

Этот бит находится на странице Login.aspx.vb

Partial Class _Default

Просто еще раз скажу, id="span1" прекрасно работает там, где это показано в коде выше, но когда я перемещаю его внутрь, я больше не могу ссылаться на него.Поскольку я говорю об этой проблеме, по этой причине я не могу добавить какие-либо новые элементы управления внутри, потому что я не могу ссылаться на какие-либо другие элементы управления в vb.net.(эта форма была в значительной степени скопирована из другого проекта, все работает правильно, я просто не уверен, почему у меня возникает эта странная проблема)

Я заметил, что у многих людей есть подобные проблемы, но в моем случаеЯ работаю с <asp:login>, и я действительно не уверен, как это влияет на мои элементы управления.

РЕДАКТИРОВАТЬ: <span id="Span1" runat="Server" style="Color: Red"></span>

Ответы [ 3 ]

2 голосов
/ 02 апреля 2019

Вам нужно использовать FindControl на элементе управления Login1

HtmlGenericControl hgc = Login1.FindControl("Span1") as HtmlGenericControl;
hgc.InnerText = "Span Found";

VB

Dim hgc As HtmlGenericControl = CType(Login1.FindControl("Span1"),HtmlGenericControl)
hgc.InnerText = "Span Found"
1 голос
/ 02 апреля 2019

В соответствии с моими комментариями и в соответствии с просьбой ОП ...

У вас проблема с контейнером имен.

Когда <span runat="server"> находится за пределами <asp:Login><LayoutTemplate>, он существует как объект на странице, на который вы можете напрямую ссылаться.

Как только он перемещается в этом <LayoutTemplate>, он становится потомком элемента управления <asp:Login>.

Таким образом, чтобы получить доступ к элементу управления, вы можете использовать следующее ...

CType(Logon1.FindControl("span1"), HtmlGenericControl).InnerHtml = "hello"

FindControl вернет объект, но он должен быть "упакован" в правильный тип, прежде чем вы сможете получить доступ к свойству InnerHtml

1 голос
/ 02 апреля 2019

для доступа к элементу управления на стороне сервера вы должны включить атрибут «runat = 'server'» в тег. Это говорит .NET, что любой данный элемент управления должен работать на стороне сервера, а также на стороне клиента.

Обратите внимание, что это изменит идентификатор, созданный в визуализированном HTML

<span id="span1" runat="server"></span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...