Доступ к элементам управления ascx из файла codebehind ascx.cs - PullRequest
0 голосов
/ 09 сентября 2010

Это должно быть довольно просто.Я делаю не-MVC ASP.NET 2.0 сайт.VS2008, кажется, генерирует элементы управления с областью <script> - я хочу код в коде, поэтому я подключил его вручную.

У меня есть следующее:

widget.ascx:

<%@ Control Language="C#" ClassName="widget" Codebehind="widget.ascx.cs" Inherits="widget"%>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

widget.ascx.cs:

namespace webapp
{
  public partial class widget : System.Web.UI.Control
  {
    protected void Page_Load(object sender)
    {
        Label1.Text = Session["user_id"].ToString();
    }
  }
}

Я копирую и вставляю этот материал со страниц ASPX, использующих файлы codebehind, но при попытке компиляции я получаю ошибки, которые Label1 does not exist in this context.

Вся помощь в этом вопросе приветствуется.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2010

Ну, я, должно быть, создал контроль неправильно. Я начал заново со свежим шаблоном, и все заработало как положено. Если у вас возникла эта проблема, просто скопируйте код и попробуйте попросить Visual Studio снова сгенерировать файлы из шаблонов пользовательских элементов управления. Убедитесь, что вы щелкнули правой кнопкой мыши на имени проекта и добавили новый файл.

0 голосов
/ 18 декабря 2012

Чтобы понять, что здесь происходит, важно отметить, что файл разметки (.ascx) наследует и имеет доступ к частным полям файла code-behind (.ascx.cs).Не наоборот: вы не можете ссылаться на объекты, определенные только в файле разметки из вашего кода.В вашем примере это также можно было бы решить, поместив в файл widget.ascx.cs следующее:

protected Label Label1;

Но что!Когда Visual Studio повторно выполняет управление, вы, вероятно, не видите такой строки в вашем файле .ascx.cs.Visual Studio управляет и поддерживает второй файл с выделенным кодом, файл .ascx.designer.cs.Символ partial в public partial class widget указывает на то, что код для элемента управления может быть определен в нескольких файлах.Вы управляете файлом .ascx.cs, а Visual Studio управляет .ascx.designer.cs.При добавлении, удалении и переименовании элементов управления из файла разметки Visual Studio должен добавлять, удалять и переименовывать связанные поля базового класса в файле кода разработчика.Если вы удалили, отредактировали или исключили этот файл, возможно, что Label1 мог быть недоступен.

0 голосов
/ 09 сентября 2010

соответствует ли это объявлению других ваших страниц / элементов управления?

попробуйте использовать codebeside вместо codebehind / лучше, чтобы просмотреть объявления в других файлах проекта.

...