我花了差不多一整天才找到解决这个问题的方法。我不知道如何解决这个问题。
这是我的观点:
<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 }
);
答案 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);
}
}
});
});