【问题标题】:getJSON not passing correct value to method in controllergetJSON 没有将正确的值传递给控制器​​中的方法
【发布时间】:2023-03-29 00:45:02
【问题描述】:

我几乎一整天都在寻找解决这个问题的方法。我不知道如何解决这个问题。

这是我的看法:

<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”的“selectedWycieczka” 'System.Web.Mvc.ActionResult 测试(Int32)' 在 'BiuroPrototyp.Controllers.Pracownik_biurowyController'。一个可选的 参数必须是引用类型、可为空的类型或声明为 一个可选参数。 Nazwa 参数:参数

路由配置:

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

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

【问题讨论】:

  • 我只是运行你的代码,它没有这样的错误。
  • 发布您的路由配置。我敢打赌你需要一条路线。
  • 好的,完成。帖子编辑
  • 创建一个特定的路由,期待您的 Pracownik_biurowyController 中 Test 方法的参数。
  • 这很奇怪,因为我在同一个控制器中有其他方法,但在不同的视图中。例如:` $.getJSON('/Pracownik_biurowy/GetPrzewodnicy', { id_regioniu: regid }, function (data) {...});` 它工作正常..

标签: c# asp.net-mvc getjson


【解决方案1】:

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

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

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

【讨论】:

  • 仍然得到一个空值。也许我应该重新安装我的 VS 甚至 Windows ?
  • 我很抱歉。我又弄错了。再次更正答案。重装真的没必要。与VS或Windows无关。
  • 我意识到了这一点,但它仍然无法正常工作。我尝试这样的事情:var target = '@Url.Action("Test", "Pracownik_biurowy")?id=' + idwyc;alert(target); 并且目标具有正确的值,例如:Pracownik_biurowy/Test?id=2alert(data) 它的undefined。就像我很伤心一样,我还有其他类似的方法,而且效果很好。
  • 你在哪里工作alert(data)?在 getJSON 回调中?
  • 是的,但是我将整个脚本移动到同一个控制器中的不同视图,因为在以前的(Test.csthml)中我无法调试它。
【解决方案2】:

好的,我仍然不知道如何解决此问题,但我找到了解决此问题的方法。 也许这不是好的做法,但它确实有效。我只是从 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);
            }

        }
    });


});

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多