ASP.NET MVC重定向操作为默认值?

时间:2009-09-05 23:51:42

标签: asp.net-mvc

我的控制器(控制器名称为'makemagic')上有一个名为'dosomething'的动作,它采用可为空的int,然后返回视图'dosomething.aspx'。至少这是我想要做的。似乎无论我被路由到Default()视图。

public ActionResult dosomething(int? id)
{       
  var model = // business logic here to fetch model from DB
  return View("dosomething", model);
}

有一个/Views/makemagic/dosomething.aspx文件,其中包含Inherits System.Web.Mvc.ViewPage

我需要对我的路线做些什么吗?我在global.aspx.cs文件中只有'stock'默认路由;

public static void RegisterRoutes(RouteCollection routes)
{
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

}

我在另一个页面中通过这样的href调用该动作;

<a href="/makemagic/dosomething/25">Click Me!</a>

认真地驱使我坚果。有关如何排除故障的任何建议?我尝试在我的路由定义上调试break,看起来没有像人们期望的那样发生。

1 个答案:

答案 0 :(得分:2)

更改它以使参数不可为空,因此它将匹配默认路由,或将名称更改为id以外的其他内容并将其作为查询参数提供。后者的一个例子是:

public ActionResult dosomething(int? foo)
{       
  var model = // business logic here to fetch model from DB
  return View("dosomething", model);
}

<a href="/makemagic/dosomething?foo=25">Click me</a>

它将与默认路由实现一起使用。或者,您可以做一些能够将其与默认路由区分开来的东西,然后您就可以为其创建路径,而不必使用查询参数。

routes.MapRoute(
        "Default",                                     // Route name
        "{controller}/{action}/foo/{id}",              // URL with parameters
        new { controller = "makemagic", action = "dosomething", id = "" }  // Parameter defaults
);

<a href="/makemagic/dosomething/foo/25">Click Me!</a>