8

@Url.Action("myAction", new { param1 = 123, param2 = 456})これを行うと無効な URL が表示されることに気付きましたHome/myAction?param1=123&param2=456

私はやろうとしています

$("#myAjaxDiv").load(url);

ただしparam1、アクション メソッドに値が入力されるだけです。

を削除し&てすぐに作成すると&機能しますが、文字列の置換を行うのは非常にハッキーです。

url = url.replace("&", "&");

ここで何か不足していますか?

編集:リクエストごとに、サンプルアプリの一部を含めています。(新しい MVC アプリを作成し、これらをすばやく追加して自分の目で確かめることができます)

コントローラ:

public ActionResult AjaxTest(int? year, int? month)
{
    ViewBag.Message = string.Format("Year: {0}, Month: {1}", year.HasValue ? year.ToString() : "no year", month.HasValue ? month.ToString() : "no month");
    return PartialView("AjaxTest");
}

AjaxTest ビュー:

@ViewBag.Message

インデックス ビュー:

<script>
    $(function () {
        var url="";
        $("#noParams").click(function () {
            url = "Home/AjaxTest";
            $("#ajaxy").load(url)
            $("#url").text(url);
        });
        $("#yearParam").click(function () {
            url = "Home/AjaxTest?year=2012";
            $("#ajaxy").load(url)
            $("#url").text(url);
        });
        $("#yearAndMonthParam").click(function () {
            url = "Home/AjaxTest?year=2012&month=10";
            $("#ajaxy").load(url)
            $("#url").text(url);
        });

        $("#generated").click(function () {
            url = "@(Url.Action("AjaxTest", new { year=2012, month=10}))";
            $("#ajaxy").load(url);
            $("#url").text(url);
        });

    });
</script>

<a id="noParams" href="#">No Params</a> <br />
<a id="yearParam" href="#">Year Param</a> <br />
<a id="yearAndMonthParam" href="#">Year and Month Param</a> <br />
<a id="generated" href="#">Generated</a> <br />
<div id="ajaxy">

</div>

<div>
URL: <span  id="url"></span>
</div>
4

2 に答える 2

14

デフォルトではIHtmlString、ブロックを使用して出力されるすべてのコンテンツ(ではない)@は、Razorによって自動的にHTMLエンコードされます(このRazorの紹介記事Htmlエンコーディングのセクションを参照してください)

Url.Action単なるプレーンを返すので、がエンコードされるstringのはそのためです。&

Html.Rawエンコードしたくない場合は、次を使用します。

url = "@(Html.Raw(Url.Action("AjaxTest", new { year=2012, month=10})))";
于 2012-10-12T20:12:34.527 に答える
4

この方法でもURLを作成できます。

var url = "@Url.Action("AjaxTest","YourControllerName")?year=2012&month=10";
$("#ajaxy").load(url);
于 2012-10-12T20:05:11.940 に答える