1

我需要通过 int 类型的“CourseID”在数据库中搜索“Courses”。我有一个简单的搜索视图表单,它只有一个文本字段“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”类型,则不会出现此错误。非常感谢您的帮助!

4

3 回答 3

0

如果您使用的是 MVC 应用程序附带的默认路由:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

它没有将视图和客户端中的值映射到clientID操作中的原因是路由中的 url 参数与操作中的参数名称不匹配。他们一定是一对。

将参数更改为:

public ActionResult SearchCourse(int id)
于 2013-04-18T23:29:37.147 回答
0

这样做的原因是您认为某些方式没有发送您键入的 courseID。将其更改为以下

 <% Html.EditorFor(model=> Model.CourseID)%>
于 2013-04-18T23:30:43.013 回答
-1

似乎 NULL 值已传递给 courseID 参数,这会导致错误,因为 int 不可为空。

改成

    public ActionResult SearchCourse(int? courseID)

请注意,这实际上是您问题的答案。你的问题是

“请帮助我理解代码中的错误。如果我将参数从“int”类型更改为“string”类型,我不会出现此错误。”

于 2013-04-18T23:24:47.503 回答