Aspx.designer.cs как это работает?
Я действительно начинаю, поэтому мой вопрос может показаться смешным. Но мне интересно, как работают файлы .aspx.designer.cs.
Это первый раз, когда я работаю с решением, содержащим файлы .aspx.designer.cs для каждой страницы. Поэтому я понимаю это объявление элементов управления, используемых в .aspx для кода-кода.
Вот мои вопросы:
Почему иногда у решений нет файлов .aspx.designer.cs? (файлы скрыты или не существует?)
У меня часто возникают проблемы с этими файлами, они не автоматически воссоздают декларации элементов управления, когда я добавляю некоторые из кода .aspx, что я делаю неправильно?
Ответы
Ответ 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.