20

我有一个 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,因为hrefs 可以进行 HTML 编码并且仍然可以工作(我只是以锚标记为例)。相反,我希望在<object> <param>Flash 对象的值标记中使用 URL。Flash 对象无法正确识别 HTML 编码的 URL,但我无法正确输出原始 URL。

我很茫然。我猜是时候破解 MVC 源代码了……

4

5 回答 5

12

发生这种情况是因为管道中的某些东西(我猜是剃刀,但我需要查找它)属性对所有属性值进行编码。但是,这不应该影响浏览器到达您想要的位置。

您可以使用@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>
于 2012-08-15T17:19:02.450 回答
4

像这样:

@{
    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 呈现为:

但这正是有效标记的样子。当用作属性时,必须对 & 符号进行编码。不用担心,浏览器会完全理解这个 url。

请注意,以下是无效标记,因此您不希望这样:

<div>
    <a href="http://someurl.com/someimage.png?a=1234&b=5678">Test</a>
</div>
于 2012-08-15T17:25:22.463 回答
3

尝试

<div>
    <a href="@MvcHtmlString.Create(test)">Test</a>
</div>
于 2012-08-15T02:48:46.677 回答
1

试试下面......它工作得很好。

@{
    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>
于 2013-06-24T07:15:43.603 回答
0

为什么不使用 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();

    }
于 2012-08-15T10:05:30.180 回答