getJSON未将正确的值传递给控制器中的方法

本文关键字:控制器 方法 值传 getJSON | 更新日期: 2023-09-27 18:21:19

我几乎花了一整天的时间来寻找这个问题的解决方案。我不知道怎么解决这个问题。

这是我的观点:

<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);
}   

我认为它应该起作用,但我总是犯错误。

参数字典包含参数的空条目方法的"System.Int32"类型不可为null的"selectedWycieczka"中的"System.Web.Mvc.ActionResult Test(Int32)"BiuroPrototype.Controller.Pracownik_biurowyController"。可选参数必须是引用类型、可为null的类型,或者声明为可选参数。Nazwa parametru:参数

RouteConfig:

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

getJSON未将正确的值传递给控制器中的方法

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

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

我不清楚为什么你的其他方法有效。

好的,我仍然不知道如何解决这个问题,但我找到了解决这个问题的方法。也许这不是一个好的做法,但它是有效的。我只是从请求[]属性中获取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);
            }
        }
    });

});