2010-09-08 2 views
0

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

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

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.

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

ответ

0

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

0

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

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

+0

Да, что соответствует другим объявлениям. Я пробовал несколько других перестановок, и они тоже не работали. :(Я тоже пробовал codebeside, чтобы не повезло. – jeffcook2150

0

Чтобы понять, что здесь происходит, важно отметить, что файл разметки (.ascx) наследуется и имеет доступ к нефайльным полям файла кода (.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 мог быть недоступен.

Смежные вопросы