Это, наверное, ошибка. Шаги для воспроизведения:
(1) Создание проекта ASP.NET MVC 3 (механизм просмотра ASPX)
(2) Перейдите в папку «Модели» и создайте новую простую модель
namespace MvcApp.Models
{
public class MyModel
{
public static string MyString = "foo";
}
}
(3) Измените файл web.config
, добавьте пространство имен моделей, чтобы вы могли использовать модели в своих представлениях.
....
</controls>
<namespaces>
<add namespace="MvcApp.Models" />
</namespaces>
</pages>
</system.web>
(4) Перейдите к /Shared/Site.Master
, измените раздел <head>
.
<head runat="server">
<title><%: MyModel.MyString %><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
<link href="<%: MyModel.MyString %>" rel="<%: MyModel.MyString %>" />
<script src="<%: MyModel.MyString %>" />
</head>
Примечание runat="server"
атрибут головы.
(5) Запустите его и посмотрите исходный код страницы. Я думаю, что вы получите (ненужные пробелы удалены):
<head id="Head1">
<title>foo Index</title>
<link href="<%: MyModel.MyString %>" rel="<%: MyModel.MyString %>" />
<script src="foo" />
</head>
Что-то интересное:
а. Все атрибуты тега link
оценены неправильно. это похоже на кодирование? При этом одинаковые выражения в title
и script
являются правильными.
б. Измените 3-ю строку на эту:
<link href="<%: MyModel.MyString %>" rel="<%: string.Format("{0}", "foo") %>" />
OR
<link href="<%: MyModel.MyString %>" rel="<%: "foo" %>" />
Вы получите все правильно (даже href
правильно!).
с. head
без runat="server"
всегда правильно.
Я думаю, что это ошибка при рендеринге представлений в HTML-тексты. Это действительно кошмар, чтобы проверить исходный код и попытаться найти ошибку. Кто-нибудь может сказать мне причину?