我有一个URL,我想在Razor视图中的锚标记中呈现.我原以为Html.Raw会是你要走的路:
@{
string test = "http://someurl.com/someimage.png?a=1234&b=5678";
}
<div>
<a href="@Html.Raw(test)">Test</a>
</div>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.&符号被编码,HTML呈现为:
<div>
<a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a>
</div>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我在锚标记之外进行Html.Raw调用,则HTML输出符合预期:
<div>
@Html.Raw(test)
<div>
Run Code Online (Sandbox Code Playgroud)
呈现为:
<div>
http://someurl.com/someimage.png?a=1234&b=5678
</div>
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么会这样?
编辑:
尝试了其他一些事情,发现以下工作符合预期:
<div data-url="@Html.Raw(test)"></div>
Run Code Online (Sandbox Code Playgroud)
输出:
<div data-url="http://someurl.com/someimage.png?a=1234&b=5678"></div>
Run Code Online (Sandbox Code Playgroud)
为了添加更多的上下文,我的目标实际上并不是在锚标记中使用URL,因为hrefs可以是HTML编码的并且仍然有用(我只使用锚标记作为示例).相反,我希望在<object> <param>Flash对象的值标记中使用URL .Flash对象无法正确识别HTML编码的URL,但我无法正确输出原始URL.
我很茫然.是时候打破MVC源代码我猜...
我们最近升级到MVC 4,现在我们的链接中的标题无法正确显示.问题出在HTML.Raw无法转义和我们的标题属性之前,但现在确实如此.以下是我的示例代码:
<a title="@Html.Raw("Shoe Size 6½-8")">Test</a>
Run Code Online (Sandbox Code Playgroud)
产生以下标记:
<a title="Shoe Size 6&#189;-8">Test</a>
Run Code Online (Sandbox Code Playgroud)
到目前为止我找到的唯一解决方案是将整个锚放入一个字符串然后HTML.Raw该字符串.
为什么Html.Raw在ASP.NET MVC 4中转义锚标记中的&符号?.
这是一个非常难看的解决方案,我希望有更好的选择.