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 }
);
您正在传递一个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);
}
}
});
});