为什么我的jQuery.Get查询参数被禁止使用action方法?

时间:2013-06-14 05:17:46

标签: jquery asp.net-mvc-4 web-deployment

我正在尝试使用$.get()来刷新列表,但无论我尝试什么,操作方法都不会获取查询参数,或者获取空值。

这是我的页面:

@model ParkPay.Helm.ViewModels.PublicHolidayIndexModel
@section ViewScripts
    {
    <script>
        $(function () {
            $("#import-link").click(function () {
                var year = $("#Year").val();
                var importUrl = "@Url.Action("Import")";
                    $.get({
                        url: importUrl,
                        data: { year: $("#Year").val() }
                    });
                });
            });
    </script>
}
<section class="index-commands">
    @Html.LabelFor(m => m.Year)
    @Html.DropDownListFor(m => m.Year, Model.YearList)
    @Html.ActionLink("Import holidays for the selected year.", "Import", null, new { id = "import-link" })
</section>
<section id="index-table">
    @Html.Partial("KendoGridPartial", Model)
</section>

我在$.get()上尝试了多种变体,并且使用上面的当前版本,Chrome中的断点显示的网址为"/PublicHoliday/Import?year=2013",但在操作方法中:

[HttpGet]
public ActionResult Import(string year)
{
    var service = new PublicHolidayService(ControllerDbContext);
    service.ImportPublicHolidays(int.Parse(year));
    return RedirectToAction("Index", new { year });
}

year的值为null。如果我尝试$.get(importUrl, {year: $("#Year").val() }),我会收到操作方法传递空值的错误。如果我试试

$.get({
    url: importUrl,
    data: { year: $("#Year").val() }
});

我得到相同的空值。如果我在操作方法签名中将year设为int,则它甚至不会进入,我得到

  

参数字典包含参数'year'的空条目

我必须如何将此参数传递给$.get?或者,$.get存在缺陷,我必须恢复为$.ajax来电吗?

1 个答案:

答案 0 :(得分:0)

请使用--JSON.stringify(yourObject);

发送您的JSON对象
var obj = { year: $("#Year").val() };
$.ajax({
    url: importUrl,
    type: "GET",
    dataType: "json",
    data: JSON.stringify(obj)
});

我遇到了同样的问题,我解决了这个问题。