相关疑难解决方法(0)

为什么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>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.&符号被编码,HTML呈现为:

<div>
    <a href="http://someurl.com/someimage.png?a=1234&amp;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源代码我猜...

razor asp.net-mvc-4

17
推荐指数
1
解决办法
1万
查看次数

剃刀 - @ Html.Raw()仍在编码&amp; 在元标记属性中

当我使用@ Html.Raw(mystring)normal时,它会正确呈现示例:

@{ ViewBag.Title = "My Site&reg;"; }
<title>@Html.Raw(ViewBag.Title)</title>
Run Code Online (Sandbox Code Playgroud)

将正确渲染<title>My Site&reg;</title>,但当我在属性中使用它时:

<meta name="description" content="@Html.Raw(ViewBag.Title)" />
Run Code Online (Sandbox Code Playgroud)

它呈现<meta name="description" content="My Site&amp;reg;" />哪些不正确,因为它不会呈现注册标记.

你如何纠正这种行为?

asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-4

8
推荐指数
1
解决办法
7197
查看次数

@ Html.Raw坚持编码引号

MVC4剃刀视图.鉴于字符串backgroundImage设置如下:

backgroundImage = string.Format("background: url('{0}') top left no-repeat;", project.MainImage);
Run Code Online (Sandbox Code Playgroud)

为什么这样呢

<div class="spotlight slide teaser-text" id="@slideId" style="@Html.Raw(backgroundImage)">
Run Code Online (Sandbox Code Playgroud)

生产

<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url(&#39;/media/215/spotlight01.jpg&#39;) top left no-repeat;">
Run Code Online (Sandbox Code Playgroud)

Html.Raw,new MvcHtmlStringMvcHtmlString.Create所有的行为类似.

希望它能产生

<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url('/media/215/spotlight01.jpg') top left no-repeat;">
Run Code Online (Sandbox Code Playgroud)

(注意引号).

razor asp.net-mvc-4

8
推荐指数
1
解决办法
2004
查看次数

标签 统计

asp.net-mvc-4 ×3

razor ×3

asp.net-mvc ×1

asp.net-mvc-3 ×1