Asp.net mvc 3 将参数传递到控制器';s操作跳过操作名称
我正在寻找缩短URL的方法,以便从DB获得一些信息。我有Homecontroller和写入动作,它将行添加到DB中,每个行都有UID。还有一个Asp.net mvc 3 将参数传递到控制器';s操作跳过操作名称,asp.net-mvc-3,routing,controller,action,asp.net-mvc-routing,Asp.net Mvc 3,Routing,Controller,Action,Asp.net Mvc Routing,我正在寻找缩短URL的方法,以便从DB获得一些信息。我有Homecontroller和写入动作,它将行添加到DB中,每个行都有UID。还有一个search操作,它在DB中查找记录,并呈现一个视图 因此,我使用localhost/Home/writing添加记录,并使用localhost/Home/search/3456按UID搜索记录 有没有办法将UID(3456)传递到控制器的动作中,跳过动作的名称,以便搜索一个我可以使用localhost/Home/3456甚至localhost/3456的
search
操作,它在DB中查找记录,并呈现一个视图
因此,我使用localhost/Home/writing
添加记录,并使用localhost/Home/search/3456
按UID搜索记录
有没有办法将UID(3456)传递到控制器的动作中,跳过动作的名称,以便搜索一个我可以使用localhost/Home/3456
甚至localhost/3456
的决议
我试过了
routes.MapRoute(
"default-action",
"{controller}/{id}",
new { action = "search", id = UrlParameter.Optional }
);
及
但是什么都没有。您可以尝试使用路由约束:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Search",
"{id}",
new { controller = "Home", action = "Search" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
现在:
将在localhost/Home/writing
HomeController上点击
操作writing
将在localhost/3456
上点击HomeController
操作,并将其作为参数传递Search
id=3456
我们为
{id}
路由令牌定义的数字约束是必需的,以便路由引擎在搜索和默认路由模式之间消除歧义(因为操作名称不能以数字开头)。它假定您的标识符是数字。@与之相比,如果这篇文章帮助您解决了问题,请确保单击旁边的勾号。完成!对不起,我是这里的新手,不能给你的回答“有用的分数”:(
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Search",
"{id}",
new { controller = "Home", action = "Search" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}