Почему Html.Raw экранирует амперсанд в теге привязки в ASP.NET MVC 4?

У меня есть URL-адрес, который я хотел бы отобразить в теге привязки, поскольку -находится в представлении Razor. Я бы подумал, что лучше всего подойдет Html.Raw:

@{
    string test = "http://someurl.com/someimage.png?a=1234&b=5678";
}

<div>
    <a href="@Html.Raw(test)">Test</a>
</div>

Но это не работает. Амперсанд кодируется, и HTML отображается как:

<div>
    <a href="http://someurl.com/someimage.png?a=1234&amp;b=5678">Test</a>
</div>

Странно то, что если я вызову Html.Raw вне тега привязки, вывод HTML будет таким, как ожидалось :

<div>
    @Html.Raw(test)
<div>

. отображается как:

<div>
    http://someurl.com/someimage.png?a=1234&b=5678
</div>

Кто-нибудь может объяснить, почему это так?

Изменить:

Попробовал несколько других вещей и обнаружил, что следующее работает, как и ожидалось:

<div data-url="@Html.Raw(test)"></div>

выходы:

<div data-url="http://someurl.com/someimage.png?a=1234&b=5678"></div>

Чтобы добавить немного больше контекста, моя цель не состоит в том, чтобы использовать URL в теге привязки , поскольку hrefмогут быть закодированы в HTML и все еще работать (я просто использовал случай тега привязки как пример ). Скорее я хочу использовать URL в теге значения <object> <param>для объекта Flash. Объект Flash неправильно распознает URL-адрес в кодировке HTML, но мне не удается правильно вывести необработанный URL-адрес.

Я в растерянности. Думаю, пришло время открыть исходный код MVC...

17
задан Nick Larsen 15 August 2012 в 17:40
поделиться