Подтвердить что ты не робот

Aspx.designer.cs как это работает?

Я действительно начинаю, поэтому мой вопрос может показаться смешным. Но мне интересно, как работают файлы .aspx.designer.cs. Это первый раз, когда я работаю с решением, содержащим файлы .aspx.designer.cs для каждой страницы. Поэтому я понимаю это объявление элементов управления, используемых в .aspx для кода-кода.

Вот мои вопросы:

Почему иногда у решений нет файлов .aspx.designer.cs? (файлы скрыты или не существует?)

У меня часто возникают проблемы с этими файлами, они не автоматически воссоздают декларации элементов управления, когда я добавляю некоторые из кода .aspx, что я делаю неправильно?

4b9b3361

Ответ 1

Файлы .aspx.designer.xx являются мостом для файлов кода ASP.NET для веб-форм и файлов разметки .aspx. Здесь представлен любой серверный элемент управления, существующий на странице разметки aspx. Наиболее важными являются имя и тип серверного элемента управления.

Это, в частности, позволяет Visual Studio предоставлять пользователю IntelliSense страницу кода для серверных элементов управления, созданных во время разработки.

Как они работают: Visual Studio будет генерировать или сохранять в синхронизации элемент protected в файле .designer при добавлении/удалении серверного элемента управления от конструктора.

  protected global::System.Web.UI.WebControls.DropDownList DropDownList1;

Обратите внимание, что файлы .designer создают partial class. Это обеспечивает связь с файлом кода. То, как Intellisense получает крючок между .aspx и кодом.

Вы можете восстановить файл дизайнера: http://www.undermyhat.org/blog/2009/07/tip-regenerate-aspx-designer-cs-files-when-corrupted/

Ответ 2

В Visual Studio есть два подхода для создания веб-сайтов: проекты веб-сайтов и проекты веб-приложений. (ОК, ОК, три, если вы добавляете MVC).

Только проекты веб-приложений имеют файлы designer.cs. Проекты веб-сайта не имеют их.

В Visual Studio 2003 был добавлен тип проекта веб-приложения.

Ответ 3

Как указано в p.campbell, файл .designer.cs связывает файл .aspx с его файлом .aspx.cs CodeBehind. Без файла .designer.cs каждый элемент управления .aspx в файле .aspx.cs CodeBehind возвращает ошибку, "не существует в текущем контексте". Связь в .designer.cs выполняется на основе свойства "Inherits" директивы @page в файле aspx вместе с пространством имен и классом файла .aspx.cs CodeBehind. Конечный сегмент свойства "Наследует" должен соответствовать классу, определенному как в файле CodeBehind, так и в файле .designer.cs, а сегменты до него должны соответствовать пространству имен файлов .designer.cs и CodeBehind.

Пример: myfile.aspx

<%@ Page Language="C#" 
    AutoEventWireup="true" 
    CodeBehind="myfile.aspx.cs" 
    Inherits="my.namespace.dot.classname" %>

myfile.aspx.cs

namespace my.namespace.dot {
    public partial class classname : Page { ... }
}

Примечание: класс файла CodeBehind должен наследоваться от класса Page или его производного.

myfile.designer.aspx.cs

namespace my.namespace.dot {
    public partial class classname { ... }
}

Примечание: класс .designer.cs не заботится о наследовании, просто имя класса соответствует файлам CodeBehind и .aspx.

Вы можете восстановить потерянный файл .designer, подобный этому (w3cgeek.com " Regenerate designer.cs" ):

  • Создайте новый пустой файл в том же каталоге, что и файлы .aspx и .aspx.cs с именем "myfile.aspx.designer.cs", где "myfile" - это имя файлов .aspx и .aspx.cs, которые вы хотите связать.
  • Добавьте пространство имен с пустым классом в новый файл и убедитесь, что их имена соответствуют пространству имен и классу, указанным в файлах .aspx и .aspx.cs, которые вы связываете.
  • Сохраните файл .designer.cs, внесите любые изменения в файл .aspx(например, добавив пробел) и сохраните файл .aspx.

Visual Studio должна автоматически заполнить файл .designer.cs всем необходимым кодом для связывания файлов .aspx и CodeBehind. "Не существует в текущем контексте" ошибки теперь должны быть удалены!

EDIT: Я добавил инструкции .designer.cs, потому что ссылка мертва, которая была первоначально отправлена ​​p.campbell.