У меня есть простой файл .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" не существует в текущем контексте
Я тоже попытался загрузить, но тот же результат!
Если у вас есть 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, что может быть причиной путаницы.
Это должно работать, пока <div>
не находится в динамическом шаблоне, например, как ретранслятор.
Проверьте шаблон своей страницы. Он должен содержать что-то вроде этого:
<div id="testdiv" runat="server">
...
<div>
Если ваш div является частью шаблона, вам нужно будет использовать container.FindControl("testdiv")
.
Изменить: Иногда Visual Studio неправильно обновляет Profile.ascx.designer.cs. Просто сохранение файла ASCX, похоже, тоже не работает. Попробуйте добавить элемент управления ASP.NET с другим именем. Это обычно вызывает регенерацию кода.
В .cs щелкните правой кнопкой мыши над testdiv и выберите "Перейти к определению". Если результат не найден, откройте .ascx в режиме проектирования и сохраните файл. Это должно сгенерировать объявление элемента управления testdiv внутри ascx.
Одна вещь, testdiv - это управление asp.net??? Этот элемент управления должен быть объявлен как защищенный в вашем файле .cs или в другом файле с частичным классом этого пользовательского элемента управления. Кроме того, testdiv должен иметь runat = "server" в файле ascx. Если у вас есть эти вещи, вы можете получить доступ к своему управлению.