getJSON没有将正确的值传递给控制器​​

时间:2015-11-09 20:44:10

标签: c# asp.net-mvc getjson

我花了差不多一整天才找到解决这个问题的方法。我不知道如何解决这个问题。

这是我的观点:

<div id="Opis"></div>

<script>
    $(document).ready(function() {
        var idwyc = 2;
        $.getJSON('@Url.Action("Test","Pracownik_biurowy")',{ selectedWycieczka: idwyc } , function (data) {

            $('#Opis').append(data)
        });
    });
</script>
Pracownik_biurowyController中的

和方法:

public ActionResult Test(int selectedWycieczka)
{

    var wycieczkaDetails =
       db.Wycieczka_fakultatywna.Where(w => w.Id_wycieczki == selectedWycieczka).Select(x => new
       {

           x.Opis,
           x.Koszt
       });

    return Json(wycieczkaDetails,JsonRequestBehavior.AllowGet);
}   

我认为它应该可以工作,但我总是得到错误。

  

参数字典包含参数的空条目   'selectedWycieczka'为非可空类型'System.Int32'的方法   'System.Web.Mvc.ActionResult Test(Int32)'中   'BiuroPrototyp.Controllers.Pracownik_biurowyController'。可选的   参数必须是引用类型,可空类型或声明为   一个可选参数。 Nazwa参数:参数

RouteConfig:

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

2 个答案:

答案 0 :(得分:1)

您正在传递一个无法映射到您的路线的JSON对象,因为在您指定的路线中{id}但您提供的是selectedWycieczka

{ selectedWycieczka: idwyc }更改为{ id: idwyc},然后在您的控制器中将public ActionResult Test(int selectedWycieczka)更改为public ActionResult Test(int id)

为什么你的其他方法不起作用我不清楚。

答案 1 :(得分:0)

好吧,我仍然不知道如何解决这个问题,但我找到了解决这个问题的方法。 也许这不是好习惯,但它确实有效。我只是从Request []属性

获取id值

方法:

   public ActionResult GetWycieczkaDetails()
    {
        var id = Request["idWycieczka"];
        int selected = Int32.Parse(id);
        var wycieczkaDetails =
            db.Wycieczka_fakultatywna.Where(w => w.Id_wycieczki == selected).Select(x => new
            {
                x.Opis,
                x.Koszt
            });



        return Json(wycieczkaDetails.ToList(),JsonRequestBehavior.AllowGet);
    }

脚本:

    $('#SelectedWycieczka').change(function () { // <-- my dropdown
    var id = $(this).find(":selected").val();


    var target = '@Url.Action("GetWycieczkaDetails", "Home")?idWycieczka=' + id;
    $.getJSON(target,  function (data) {

        if (data.length > 0) {
            for (i = 0; i < data.length; i++) {
                $('#Opis').append(data[i].Opis);
                $('#Koszt').append(data[i].Koszt);
            }

        }
    });


});