gpt4 book ai didi

c# - 可选参数必须是引用类型、可空类型或声明为可选参数。参数名称 : parameters`

转载 作者:太空狗 更新时间:2023-10-30 00:48:36 25 4
gpt4 key购买 nike

我正在 .net MVC 中创建一个演示应用程序。

下面是我的 StudentController 的代码片段。

public ActionResult Edit(int studentId)
{
var std = studentList.Where(s => s.StudentId == studentId).FirstOrDefault();
return View(std);
}

[HttpPost]
public ActionResult Edit(Student std)
{
//write code to update student

return RedirectToAction("Index");
}

来自 RouteConfig 的代码片段:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

当我点击 url http://localhost:54977/student/Edit/1 时,出现以下异常。

参数字典包含“MVC1.Controllers.StudentController”中方法“System.Web.Mvc.ActionResult Edit(Int32)”的不可为空类型“System.Int32”的参数“studentId”的空条目'.可选参数必须是引用类型、可空类型或声明为可选参数。
参数名称:parameters
.

但是当我点击 url http://localhost:54976/student/Edit?StudentId=1 时它工作正常。

我是 .net MVC 的新手。任何人都可以就此向我提出建议。

最佳答案

问题是由于您的路由配置造成的。

 routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

http://localhost:54977/student/Edit/1中的第三个参数映射到 {id} 而不是 studentId。

您有两种选择来解决问题:

1) 更改参数名称

public ActionResult Edit(int id) {
var std = studentList.Where(s => s.StudentId == id).FirstOrDefault();
return View(std);
}

2) 添加新路由进行编辑:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"EditStudent",
"Edit/{StudentId}",
new { controller = "Student", action = "Edit" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

关于c# - 可选参数必须是引用类型、可空类型或声明为可选参数。参数名称 : parameters`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45058519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com