20

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を使用することではありません。これは、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を使用してURLを投稿してみませんか:

    $(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 に答える