Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 将参数传递到控制器';s操作跳过操作名称_Asp.net Mvc 3_Routing_Controller_Action_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc 3 将参数传递到控制器';s操作跳过操作名称

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的

我正在寻找缩短URL的方法,以便从DB获得一些信息。我有Homecontroller和写入动作,它将行添加到DB中,每个行都有UID。还有一个
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 }
    );
}