1

我正在尝试使用参数将下拉列表更改自动提交到我的控制器。POST 确实发生了,但我只收到此错误

参数字典包含“shopping.WebUI”中方法“System.Web.Mvc.ViewResult Index(System.String, System.String, Int32)”的不可为空类型“System.Int32”的参数“类别”的空条目.Controllers.HomeController'。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数

我有一个 JQuery 脚本

$(".autoSubmit select").change(function () {
    $(this).closest('form').submit();
});

我的视图上的表格

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.Action("ShipToCountry", "Filters", new { Model.SelectedCountry })
}

但需要发布到此操作

[HttpPost]
public ViewResult Index(string country, string currency, int category)
{
    var viewModel = new MainViewModel
    {
        SelectedCountry = country,
        SelectedCurrency = currency,
        Categories = category }
    };
    return View(viewModel);
}

国家、货币、类别参数都不是或可以是可选的。

我需要在 View 上进行哪些更改才能将这些参数传递给 Action?

谢谢

4

2 回答 2

1

该错误表明您category的视图参数Index为 NULL。您要么必须更改 HTML 和 javascript,以便category参数在发布之前获取值,要么您可以更改 POST 方法以使其成为category可选,如下所示:

[HttpPost]
public ViewResult Index(string country, string currency, int? category)
{
    var viewModel = new MainViewModel
    {
        SelectedCountry = country,
        SelectedCurrency = currency,
        Categories = category }
    };
    return View(viewModel);
}

编辑:

由于您不能使参数成为可选参数,因此您必须在 HTML 中确保在执行 POST 之前,所有<input><select>元素都已正确填充(如果它们还没有,则正确命名)。

在您的情况下,问题出在类别参数上。假设自动提交的 select 也是类别的下拉列表,您需要确保输出的 HTML 与此类似:

<select name="category">
    <option value="1">Category 1</option>
    <option value="2">Category 2</option>
    <option value="3">Category 3</option>
</select>

这里的关键是选择必须具有名称category(或者您应该重命名方法中的参数categoryIndex匹配此选择的名称)并且选项必须具有整数值。


编辑2:

要添加货币和​​类别,您需要将<input name="currency"><input name="category">字段添加到<form>您所在国家/地区的相同位置。请注意,它不需要<input>具体,也可以<select>,但字段name必须与Index方法中的参数名称相同。

于 2012-10-30T19:12:00.813 回答
1

要么包含一些名称为“类别”的输入,要么使类别参数为空,例如public ViewResult Index(string country, string currency, int? category)

如果您的下拉列表是上述“类别”输入,请确保在发布表单之前它具有实际值。

于 2012-10-30T19:12:41.577 回答