我的控制器(控制器名称为'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,看起来没有像人们期望的那样发生。
答案 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>