Не удается получить доступ к элементам управления в Page_Load - PullRequest
2 голосов
/ 11 января 2010

У меня есть простой файл .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;
}

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

ошибка CS0103: имя 'testdiv' не существует в текущем контексте

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

Ответы [ 4 ]

4 голосов
/ 11 января 2010

Если у вас есть 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 голосов
/ 11 января 2010

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

0 голосов
/ 11 января 2010

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

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

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

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

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

0 голосов
/ 11 января 2010

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

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