我需要通过“CourseID”搜索数据库中的“Courses”,这是一种int类型。我有一个简单的搜索视图表单,只有一个文本字段,“CourseID”:
<% using (Html.BeginForm())
{ %>
<%= Html.AntiForgeryToken() %>
<fieldset>
<legend> Search By Course ID#:</legend>
<label for="CourseID">Enter Course ID#:</label>
<%= Html.TextBox("CourseID", Model.CourseID) %>
<%= Html.ValidationMessage("CourseID", "*") %>
</fieldset>
<p>
<input type="submit" value="Submit" />
</p>
<% }%>
在Controller类中,我有一个SearchCourse操作方法:
// GET: /SearchCourse
[Authorize(Roles = "Administrator")]
public ActionResult SearchCourse(int courseID)
{
return View(new SearchCourse(
new List<Courses>().AsQueryable(), courseID));
}
//
当我运行应用程序时,我收到一条错误消息:
>'/'应用程序中的服务器错误。 参数字典包含'Certifications.Controllers.SearchCourseController'中方法'System.Web.Mvc.ActionResult SearchCourse(Int32)'的非可空类型'System.Int32'的参数'courseID'的空条目。要使参数可选,其类型应为引用类型或Nullable类型。 参数名称:参数
请帮我理解代码中的错误。如果我将参数从“int”类型更改为“string”类型,我没有此错误。 非常感谢你的帮助!
答案 0 :(得分:0)
如果您使用的是MVC应用程序附带的默认路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
它未将View中和客户端上的值映射到操作中的clientID
的原因是因为路由中的url参数与操作中的参数名称不匹配。他们必须是匹配。
将参数更改为:
public ActionResult SearchCourse(int id)
答案 1 :(得分:0)
原因是您查看了如何不发送您输入的courseID。将其更改为以下
<% Html.EditorFor(model=> Model.CourseID)%>
答案 2 :(得分:-1)
似乎已将一个NULL值传递给courseID参数,导致错误,因为int不可为空。
更改为
public ActionResult SearchCourse(int? courseID)
请注意,这确实是您问题的答案。你的问题是
“请帮我理解代码中的错误。如果我改变了 参数从“int”类型到“string”类型,我没有这个 错误“。