搜索方法会生成错误

时间:2013-04-18 23:20:58

标签: c# asp.net-mvc search int

我需要通过“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”类型,我没有此错误。 非常感谢你的帮助!

3 个答案:

答案 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”类型,我没有这个   错误“。