В RC1 изменилось поведение шаблона для создания представления.
Как объясняется в сообщении Скотта Гу о кандидате на выпуск , вновь созданное представление aspx по умолчанию больше не имеет файла с выделенным кодом.
На основании отзывов мы изменились
шаблоны представления, чтобы не иметь
файл с выделенным кодом по умолчанию. это
изменение помогает укрепить цель
представления в приложении MVC (которые
предназначено быть исключительно о рендеринге
и не содержать никаких не рендеринга
связанный код), и для большинства людей
удаляет неиспользуемые файлы в
проект.
Сборка RC теперь добавляет синтаксис C # и VB
поддержка наследования шаблонов представления
из базовых классов, которые используют дженерики.
Например, ниже мы используем это
с шаблоном представления Edit.aspx -
чей атрибут «наследует»
из типа ViewPage:
Мне действительно нравится возможность писать конкретный код вида в коде для простого вывода вида, особенно если у меня повторяется логика в нескольких частях страницы, где я не могу оправдать создание частичного представления.
Мой фактический вопрос: Скотт сказал по умолчанию - что подразумевает, что я могу изменить это поведение, но я не могу видеть, где. Является ли это возможным? Вручную создавать файл кода и менять вещи - это боль.
Это также вызывает дополнительную проблему:
- Если я произвожу рефакторинг имени своей модели, директива в представлении не будет обновлена. Это не конец света, а одно явное преимущество, заключающееся в том, что он полностью напечатан.
Приложение: Для тех из вас, кто интересуется, ПОЧЕМУ я хотел бы получить код, вот некоторые из возможных причин. Это совокупный список всего, о чем я думал. Само собой разумеется (ну, должно быть), что вы не должны иметь доступ ни к каким данным, кроме тех, которые уже есть в модели. LINQ подойдет для простого манипулирования данными модели, но LINQ to SQL НЕ подойдет! MVC предназначен для людей, которые уже должны это знать - вот почему я люблю это - сделанных умными людьми для умных людей.
- Унаследованные элементы управления устаревшими элементами управления ASP.NET - если альтернатива недоступна или требуется временное решение.
- Просмотр логики, требующей рекурсии, для создания некоего вложенного или иерархического HTML.
- Просмотр логики, которая использует временные переменные. Я отказываюсь определять локальные переменные в моем супе тега! Я хотел бы, чтобы они как свойства класса представления, по крайней мере.
- Логика, характерная только для одного вида или модели и не принадлежащая HtmlHelper. В качестве примечания, я не думаю, что HtmlHelper должен знать о каких-либо классах 'Model'. Хорошо, если он знает о классах, определенных внутри модели (например,
IEnumerable<Product>
, но я не думаю, например, что у вас когда-либо будет HtmlHelper, который принимает ProductModel
.
- Методы HtmlHelper становятся видимыми из ВСЕХ ваших представлений, когда вы набираете
Html+dot
, и я действительно хочу максимально сократить этот список.
- Что если я захочу написать код, который использует
HtmlGenericControl
и другие классы в этом пространстве имен для генерации моего HTML объектно-ориентированным способом (или у меня есть существующий код, который выполняет то, что я хочу портировать).
- Что, если я планирую использовать другой движок представления в будущем. Возможно, я бы хотел оставить некоторую логику в стороне от супа с тегами, чтобы потом было легче использовать его снова.
- Что делать, если я хочу иметь возможность переименовывать свои классы Model и автоматически изменять рефакторинг моего представления без необходимости переходить к view.aspx и изменять имя класса.
- Что делать, если я координирую работу с HTML-дизайнером, которому я не доверяю, чтобы он не испортил «суп-тег» и захотел написать что-нибудь еще, кроме простого зацикливания в файле .aspx.cs.
Iдумаю, что люди склонны к «выделению кода», поскольку оно традиционно интерпретируется как «код обработки событий», а не «другая половина частичного класса представления», каковым оно является.
Кодовый код для представлений просто отлично.
Я не согласен с тем, что он немного загромождает структуру папок, но для этого и нужен значок +
. Мне просто нужна возможность создавать представление с помощью codebehind с помощью «Добавить представление».