可选参数必须是引用类型、可为 null 的类型或声明为可选
本文关键字:类型 声明 null 参数 引用类型 可为 | 更新日期: 2023-09-27 17:56:59
我正在使用ViewBag将一个值从控制器传递到View,并将其存储在变量中。然后从同一视图将值发送回存储在变量中的控制器。早些时候它曾经工作过,但最近它开始给我下面的错误。
参数字典包含不可为空类型"System.Int32"的参数"nServiceId"的空条目,方法的非可空类型"System.Int32" 'System.Web.Mvc.ActionResult SaveRequest(Int32, BussinessObjects.class1, System.Web.Mvc.FormCollection)'.可选参数必须是 引用类型、可为 null 的类型或声明为可选 参数。
我的代码如下:
控制器:
public ActionResult EnterData(int nServiceId)
{
ViewBag.ServiceId = nServiceId;
return View();
}
[HttpPost]
public ActionResult SaveRequest(int nServiceId, GetQuoteInfo viewModel, FormCollection fCollection)
{
}
视图:
@{int nServiceId = ViewBag.ServiceId;}
@using (Html.BeginForm("SaveRequest",
"MyController",
FormMethod.Post,
new
{
name = "EnterData",
id = "EnterData",
nServiceId = nServiceId
}))
您没有将nServiceId
的值传递给控制器。您正在使用此重载Html.BeginForm()
其中最后一个参数 (new { name = "EnterData", id = "EnterData", nServiceId = nServiceId }
) 将nServiceId = "nServiceId"
添加为 html 属性,而不是路由值(检查它生成的 html)。
您需要在使用率为
@using (Html.BeginForm("SaveRequest", "MyController", new { nServiceId = nServiceId }, FormMethod.Post, new { name = "EnterData", id = "EnterData" }))
或new { nServiceId = ViewBag.ServiceId }