可选参数必须是引用类型、可为 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
    }))

可选参数必须是引用类型、可为 null 的类型或声明为可选

您没有将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 }