我试图通过Jquery将我的下拉列表的值传递给我的控制器,我尝试的一切,给了我第二个参数的空指针。这是我的代码:
这是jQuery代码:
<script>
$(function () {
$("#ddl").on("change", function () {
var selectedID = $("#ddl").val();
this.href = this.href.replace("idhotel", selectedID);
});
});
</script>
这是我的ActionLink:
@Html.ActionLink("Voeg toe aan winkelwagentje", "Winkelwagen", new { id = Model.Id, hotelid="idhotel" }, new { @class = "btn btn-default" })
这是我在控制器中的行动: (只是标题)
public ActionResult Winkelwagen(int? id,int hotelid)
{
Console.Write("Please give me the hotelid: " + hotelid);
Return View();
}
以下是下拉列表:
@Html.DropDownList("ddl", new SelectList(ViewBag.list, "Text", "Value"), "Select")
输出下拉列表:
错误:
>应用程序中的服务器错误。参数字典包含非&gt;参数'hotelid'的空条目。方法'System.Web.Mvc.ActionResult&gt;的可空类型'System.Int32' Winkelwagen(System.Nullable`1 [System.Int32],Int32)'&gt;在'TreinRittenVives.Controllers.ReizenController'中。可选参数必须>是引用类型,可空类型,或声明为可选参数。 参数名称:参数
答案 0 :(得分:0)
您的第二个参数在控制器上不可为空。
它应该是......
public ActionResult Winkelwagen(int? id, int? hotelid)
如果您希望它是可以为空的类型。
此致
克雷格
答案 1 :(得分:0)
试试这个:
$("#ddl").on("change", function () {
var selectedID = $("#ddl").val();
$(a).prop("href", $(a).prop("href").replace("idhotel", selectedID));
});
答案 2 :(得分:0)
this.href
表示您的选择元素,其ID为#ddl
且select
无法包含href
属性。所以你可以做点什么
<script>
$(function () {
$("#ddl").on("change", function () {
var newHref=$("a").attr("href").replace("idhotel", this.value);
$("a").attr("href",newHref);
});
});
</script>
答案 3 :(得分:0)
您的错误:
&#39; /&#39;中的服务器错误应用。 参数字典包含参数&#39; hotelid&#39;的空条目。非&gt;可空类型&#39; System.Int32&#39; for method&#39; System.Web.Mvc.ActionResult&gt; Winkelwagen(System.Nullable`1 [System.Int32],Int32)&#39; &GT;在&#39; TreinRittenVives.Controllers.ReizenController&#39;。可选参数必须>是引用类型,可空类型,或声明为可选参数。参数名称:参数
错误原因:
上述错误将在开发过程中大部分时间发生,上述错误的主要原因是,当我们在控制器中编写一个动作方法时,我们会将参数指定为不可为空的,而不是问号。数据类型 前
Public void test(int a,int b)
必须传递该值,如果由于某种原因我们无法通过,则会发生上述错误。
错误解决方案: 针对上述问题的最佳解决方案是将参数设为可为空的
Nullable ex:
Public void test(int?a,int?b)
更多信息:https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/nullable-types/