如何在MVC中获取下拉列表的值到控制器

时间:2017-05-18 15:02:51

标签: c# jquery asp.net asp.net-mvc visual-studio

我试图通过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")

输出下拉列表:

enter image description here

错误:

  应用程序中的服务器错误。

     

参数字典包含非&gt;参数'hotelid'的空条目。方法'System.Web.Mvc.ActionResult&gt;的可空类型'System.Int32' Winkelwagen(System.Nullable`1 [System.Int32],Int32)'&gt;在'TreinRittenVives.Controllers.ReizenController'中。可选参数必须>是引用类型,可空类型,或声明为可选参数。   参数名称:参数

4 个答案:

答案 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为#ddlselect无法包含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/