0

这是当前为属性详细信息页面生成的 url。

http://localhost:61346/Property/Details?strap=0001020005

我想读这个

http://localhost:61346/Property/Details/0001020005

这是我注册的路线。这在 MVC3 中设置简单吗?解释如何为此格式设置“RegisterRoutes”的额外要点

http://localhost:61346/Property/0001020005 <--只是隐藏动作名称

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


            routes.MapRoute(
                   "Property", // Route name
                   "{controller}/{action}/{ParcelId}", // URL with parameters
                   new { controller = "Property", action = "List", ParcelId = UrlParameter.Optional } // Parameter defaults
               );

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

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


        }
4

2 回答 2

1

如果您删除DetailsandProperty路由并将您的DetailsandList操作方法更改为接受string id作为参数,您的默认路由应该采用该格式。您的Property路线与默认路线冲突。

您想要的格式与默认路由兼容。您只需要更改参数名称以适应处理此问题。

public ActionResult Details(string id){...}

public ActionResult List(string id){...}

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 =UrlParameter.Optional  
                 });
}
于 2012-05-21T20:28:07.907 回答
1

为了更清晰地映射您的 URL,您只需将 URL 中的值映射到您的操作方法中的参数。由于您正在使用strap,因此您需要一个映射它的路线,就像您的“财产”路线一样:

routes.MapRoute( 
    "PropDetails", // Route name 
    "{controller}/{action}/{strap}", // URL with parameters 
    new { controller = "Property", action = "Details" }
);

但请注意,您的路线将按照您定义它们的顺序使用。因此,在您列出的那些中,Default并且Details永远不会被实际使用,因为Property它们会全部捕获。相反,您可能想要更多类似的东西:

routes.MapRoute( 
    "PropDetails", // Route name 
    "Property/Details/{strap}", // URL with parameters 
    new { controller = "Property", action = "Details" }
);

这将确保只有路由匹配/Property/Details/{strap}会受到影响(例如您的示例 URL),并且您不会对/Something/Else/.

要回答您关于 {id} 的问题,这只是路线中定义的内容。您可以随意命名,例如 {strap}。但是,如果您重写您的操作方法以接受 a string ID,那么您将丢失查询字符串,而无需修改您的路线。

public ActionResult Details (string id) { ... }  // Don't have to modify your routes
public ActionResult Details (string strap) { ... } // Have to modify your routes to remove the querystring
于 2012-05-21T20:54:04.377 回答