Почему я не могу использовать ContentPlaceholder внутри атрибутов HTML в ASP.NET? - PullRequest
3 голосов
/ 20 января 2011

Я использую ASP.NET MVC2 и C #, но этот вопрос относится к ASP.NET в целом.

Это разбивает:

<body id="<asp:ContentPlaceHolder ID="BodyID' runat="server" />">

Intellisense подчеркивает тег bodyи открывающая кавычка сразу после id= и жалуется:

Проверка (HTML 4.01): элементу "body" не хватает символа ">" в его начальном теге.

Элемент asp игнорируется, а атрибут id пуст в отображаемом HTML.(Та же проблема, использую ли я двойные или одинарные кавычки внутри элемента ASP, хотя последний нарушает подсветку синтаксиса в VS.)

Это работает (при условии, что я установил переменную сеанса):

<body id="<%: Session["BodyID"] %>">

Почему встроенная оценка поддерживается внутри атрибутов HTML, но элементы управления ASP не будут отображаться внутри атрибутов?

Вот мой пример использования: на основе данных, передаваемых из контроллера, представление знает, какой тип данных эторендеринг.Представление вводит данные в различные места на главной странице.Я могу добавить заголовок в заголовок и разметку в тело - но я также хочу добавить данные в некоторые атрибуты.Идентификаторы и имена классов являются очевидными примерами, но есть и другие.

Я хочу сделать это, сохраняя действительную разметку;никаких трюков, таких как динамическое отображение всего тега тела - я хочу, чтобы в Visual Studio всегда была страница, похожая на действительный документ HTML или XML.

Использование встроенного метода eval - это нормально, но для этого нужно, чтобы я установил свойства, что я делаю в модели или контроллере.В некоторых случаях это необходимо, но в других значениях являются статическими - у меня есть специальное представление, и мне просто нужно вставить статическое значение из представления в главную страницу.Я не хочу вдаваться в подробности создания абстрактного класса контроллера, чтобы все мои контроллеры наследовали его и т. Д., Чтобы получить ту же функциональность, которая у меня уже есть, когда я внедряю разметку.

Дополнительный вопрос (да, я должен открыть для него отдельный вопрос): каков порядок оценки элементов управления ASP и встроенных кодовых самородков?Я предполагаю, что слепки кода разрешаются в первую очередь, перед элементами управления ASP, поэтому я мог бы, например, поместить слепок кода в объявление элемента управления ASP.Но я не могу найти документы, которые детализируют процесс - кто-нибудь может мне их указать?

Спасибо!

ОБНОВЛЕНИЕ: Паули упомянул, что вы действительно можете использоватьДержатели ContentPlace в любом месте, если они не находятся внутри элемента, который уже помечен runat="server".Я снова проверил, и вижу, что он прав - сначала я это пропустил.Visual Studio все еще находится в замешательстве и выдает предупреждение проверки HTML, но ожидаемое значение отображается в атрибуте при визуализации страницы.Итак, ответ на вопрос: «Но ты можешь!»

1 Ответ

2 голосов
/ 20 января 2011
  1. вы не должны использовать элементы управления WebForms с MVC
  2. используйте '' вокруг вашего идентификатора и runat, так как парсер запутан во всех ваших конфликтующих "'*

Поскольку у тега body нет runat = "server", он не рассматривается как серверный элемент управления, а только как чистый текст, и вы можете для него поместить заполнитель содержимого или любой другой элемент управления в любое место.

...