【问题标题】:Why does this route not work correctly?为什么这条路线不能正常工作?
【发布时间】:2010-02-04 05:36:25
【问题描述】:

我真的要疯了。

这是我的 Global.asax 中的内容

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

这是我仅有的两条路线。

当我尝试访问时

http://mysite/Blogs/Edit/1不起作用我收到此错误

参数字典包含“mysite.Controllers.BlogsController”中方法“System.Web.Mvc.ActionResult Details(Int32)”的不可为空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。

为什么会一直这样?

谢谢

我还应该添加我的控制器代码,如下所示

//
// GET: /Blogs/Edit/5

[Authorize]
public ActionResult Edit(int id)
{
  // do a bunch of stuff and return something
}

【问题讨论】:

  • 如果在第二条路由中删除id 的默认值会怎样?
  • 仍然给我同样的错误。它还破坏了网站上的所有其他链接

标签: c# asp.net-mvc model-view-controller


【解决方案1】:

试试下面的

routes.MapRoute("BlogDetails", "Blogs/{id}/{title}",
 new { controller = "Blogs", action = "Details"},
 new { id = @"\d+" });

就 MVC 路由而言,{id} 可以是任何东西(甚至是字符串),因此它将Edit 作为字符串匹配,它不能进入​​您操作的 int id

添加new { id= @"\d+" } 作为额外参数告诉路由系统只匹配号码。

http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3))/learn/mvc/tutorial-24-cs.aspx

【讨论】:

    【解决方案2】:

    您拥有的 2 条路线实际上是“冲突”,在您的情况下,第一条路线被选中,而不是您期望的第二条。

    也许您需要修改路线以消除歧义:

    routes.MapRoute("BlogDetails", "Blogs/{id}-{title}", new { controller = "Blogs", action = "Details", id = "" });
    routes.MapRoute(
      "Default",                                              // Route name
      "{controller}/{action}/{id}",                           // URL with parameters
      new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );
    

    此定义将明确区分:http://mysite/Blogs/Edit/1http://mysite/Blogs/1-first

    或者正如 Baddie 提到的,尝试给路由添加约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      相关资源
      最近更新 更多