Я использую 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, но ожидаемое значение отображается в атрибуте при визуализации страницы.Итак, ответ на вопрос: «Но ты можешь!»