为什么Html.Raw逸出锚标记符号在ASP.NET MVC 4?为什么Html.Raw逸出锚标记符

2019-05-12 04:16发布

我有我想在一个锚定标记渲染为,是在Razor视图的URL。 我本来以为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对象不能正确识别的HTML编码的网址,但我不能正确地获取原始URL输出。

我很茫然。 时间打出来的MVC源代码,我猜...

Answer 1:

这是发生,因为一些在管道(我猜的剃须刀,但我需要看看它)属性编码所有商品属性值。 这应该不会影响但是从到达您想要的位置的浏览器。

您可以使用测试这个@Html.ActionLink(text, action, routeAttributes)过载。

@Html.ActionLink("Test", "Index", new { tony = "1", raul = 2 })

输出

<a href="/?tony=1&amp;raul=2">Test</a>

在问候你的编辑,你只需要使整个<param>您的原始值的一部分。

@{
    var test = "<param src=\"http://someurl.com/someimage.png?a=1234&b=5678\">";
}

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


Answer 2:

像这样:

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

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

产生有效的标记:

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

但是,这是行不通的。 该符号被编码和HTML呈现为:

但是,这正是一个有效的标记应该是什么样子等。 作为一个属性使用时与符号必须被编码。 别担心,浏览器将完全没有理解这个网址。

请注意,以下是无效的标记,所以你不希望这样

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


Answer 3:

尝试

<div>
    <a href="@MvcHtmlString.Create(test)">Test</a>
</div>


Answer 4:

只是尝试以下...它完美的作品。

@{
    string test = "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token="+@ViewBag.Token;
}
<div>
    <a href="@Html.Raw(System.Web.HttpUtility.HtmlDecode(test))">@Html.Raw(System.Web.HttpUtility.HtmlDecode(test))</a>
</div>


Answer 5:

你为什么不使用jQuery文章的网址:

    $(function () {
    $('form').submit(function () {
        $.ajax({
            url: this.action,
            type: this.method,
            data: { a:'firstvalue', b: 'secondvalue'},
            success: function (result) {
//code for successful result
            }
        });
        return false;
    });
});

在控制器

public ActionResult Fetch(string a, string b)
    {
        //write required codes here
            return View();

    }


文章来源: Why is Html.Raw escaping ampersand in anchor tag in ASP.NET MVC 4?