Не удается получить доступ к элементам управления в Page_Load

2

У меня есть простой файл .ascx

<%@ Control Language="C#"
    AutoEventWireup="true"
    CodeFile="Profile.ascx.cs"
    Inherits="UserControls_Profile" %>
<%@ Register Assembly="RadChart.Net2"
    Namespace="Telerik.WebControls"
    TagPrefix="radC" %>
<div id="testdiv" runat="server"></div>

в коде позади:

protected void Page_Load(object sender, EventArgs e) {
  Chart();
}

private void Chart() {
  testdiv.Visible=false;
}

Когда я пытаюсь получить доступ к странице, я получаю исключение:

error CS0103: Имя "testdiv" не существует в текущем контексте

Я тоже попытался загрузить, но тот же результат!

  • 0
    Пожалуйста, дайте код, который определяет testDiv.
  • 0
    Можете ли вы опубликовать код страницы aspx?
Показать ещё 2 комментария
Теги:
user-controls
web-applications

4 ответа

4
Лучший ответ

Если у вас есть HTML div, вам нужно добавить атрибут runat, например

  <div id="testDiv" runat="server">Hello world</div>

HTML-элементы, такие как div, не являются элементами управления ASP.NET, хотя смешивание HTML-элементов управления с ASP.NET может быть проблематичным. Вы можете сделать что-то вроде

  <asp:panel id="myPanel" runat="server">Hello world</asp:panel>

Обновление: Также проверьте Profile.ascx.designer.cs, который должен быть автоматически сгенерирован Visual Studio, чтобы содержать "защищенный HtmlControl testdiv". Я предполагаю, что отсутствует в частичном классе. Я отмечаю, что вы проистекаете из UserControls_Profile, что может быть причиной путаницы.

0

Это должно работать, пока <div> не находится в динамическом шаблоне, например, как ретранслятор.

Проверьте шаблон своей страницы. Он должен содержать что-то вроде этого:

<div id="testdiv" runat="server">
   ...
<div>

Если ваш div является частью шаблона, вам нужно будет использовать container.FindControl("testdiv").

Изменить: Иногда Visual Studio неправильно обновляет Profile.ascx.designer.cs. Просто сохранение файла ASCX, похоже, тоже не работает. Попробуйте добавить элемент управления ASP.NET с другим именем. Это обычно вызывает регенерацию кода.

0

В .cs щелкните правой кнопкой мыши над testdiv и выберите "Перейти к определению". Если результат не найден, откройте .ascx в режиме проектирования и сохраните файл. Это должно сгенерировать объявление элемента управления testdiv внутри ascx.

0

Одна вещь, testdiv - это управление asp.net??? Этот элемент управления должен быть объявлен как защищенный в вашем файле .cs или в другом файле с частичным классом этого пользовательского элемента управления. Кроме того, testdiv должен иметь runat = "server" в файле ascx. Если у вас есть эти вещи, вы можете получить доступ к своему управлению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню