8

我注意到这样做为@Url.Action("myAction", new { param1 = 123, param2 = 456})我提供了一个无效的 URL Home/myAction?param1=123&param2=456

我正在尝试做

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

但只有param1在 action 方法中填充。

当我删除&并制作它时&它就可以工作,但是做一个字符串替换是超级hacky。

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发出的每个内容(不是@

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 回答