【问题标题】:Search Method generates an error搜索方法产生错误
【发布时间】:2013-04-18 23:20:58
【问题描述】:

我需要通过“CourseID”(一种 int 类型)在数据库中搜索“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”类型,则不会出现此错误。 非常感谢您的帮助!

【问题讨论】:

  • 你为 url 使用的路由是什么?如果您使用的是默认控制器路由,那就是问题。
  • 您正在发布,而不是获取。 POST 方法是什么样的。 Fiddler/debugger 是你的朋友。
  • 感谢您的调查!我能够找出我的问题,并且搜索可以按我的需要工作。

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


【解决方案1】:

如果你使用的是 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)

【讨论】:

  • 我按照您的建议更改了参数,但仍然遇到相同的错误。有任何想法吗?这只是通过 CourseID 进行简单搜索以获取记录,我就卡在这里了。谢谢!
  • 您能否使用为此操作请求设置的路线更新您的问题?
【解决方案2】:

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

 <% Html.EditorFor(model=> Model.CourseID)%>

【讨论】:

  • 对不起,我使用的是旧版本的 asp.net mvc1,我没有这个助手。
  • 即使我在运行应用程序时有一个空视图。它会产生相同的错误。是Controller中的代码错误吗?谢谢!
【解决方案3】:

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

改成

    public ActionResult SearchCourse(int? courseID)

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

“请帮助我理解代码中的错误。如果我更改了 从“int”类型到“string”类型的参数,我没有这个 错误。”

【讨论】:

  • 是的,他在问为什么会出现错误。这是因为视图不是参数不可为空。尽管他输入了 courseID,但他的视图没有正确绑定并发送 courseID。
  • 当我将“int”更改为“int”时?尝试运行应用程序时出现 2 个错误。第一个错误是:“错误 81 参数 '2':无法从 'int 转换?'到 'int';第二个错误说:错误 80 'Certifications.Models.SearchCourses.SearchCourses(System.Linq.IQueryable, int)' 的最佳重载方法匹配有一些无效参数
  • @Sander Pham:感谢您的提示!它有帮助!我只是不知道如何从您的评论中删除“-1”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多