【发布时间】:2017-10-25 13:18:48
【问题描述】:
我刚开始学习 MVC,我试图将 studentId 作为参数传递给编辑页面。默认情况下,当您单击编辑链接时,它会转到:
localhost:63348/student/Edit/5
但它不起作用。它给了我这个错误
参数字典包含“WebApplication1.Controllers.StudentController”中方法“System.Web.Mvc.ActionResult Edit(Int32)”的不可空类型“System.Int32”的参数“StudentId”的空条目。
但如果我手动将其更改为:
localhost:63348/student/Edit?studentid=5
它然后工作。他们应该意思相同并且工作方式几乎相同吗?
这是我的控制器:
public IList<Student>studentList = new List<Student>{
new Student() { StudentId = 1, StudentName = "John", Age = 18 } ,
new Student() { StudentId = 2, StudentName = "Steve", Age = 21 } ,
new Student() { StudentId = 3, StudentName = "Bill", Age = 25 } ,
new Student() { StudentId = 4, StudentName = "Ram" , Age = 20 } ,
new Student() { StudentId = 5, StudentName = "Ron" , Age = 31 } ,
new Student() { StudentId = 6, StudentName = "Chris" , Age = 17 } ,
new Student() { StudentId = 7, StudentName = "Rob" , Age = 19 }
};
[Route("Edit/{studentId:int")]
public ActionResult Edit(int StudentId)
{
//Get the student from studentList sample collection
var std = studentList.Where(s => s.StudentId == StudentId).FirstOrDefault();
return View(std);
}
尝试添加特定的路由配置,但也没有用:
routes.MapRoute(
name: "StudentEdit",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Student", action = "Edit", id = UrlParameter.Optional }
);
【问题讨论】:
-
两件事。首先,您的路线格式错误。
[Route("Edit/{studentId:int")]你错过了结束}。其次,您的路由参数与方法参数的名称不同。案件很重要。 -
@Amy,
DefaultModelBinder不区分大小写 -
你需要在你的
RouteConfig.cs中添加routes.MapMvcAttributeRoutes();在routes.MapRoute(...)之前启用属性路由,并在你的控制器定义中添加[RoutePrefix("Student")]
标签: c# asp.net-mvc