这是当前为属性详细信息页面生成的网址。
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
);
}
答案 0 :(得分:1)
如果您移除Details
和Property
路由,并将Details
和List
操作方法更改为接受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
});
}
答案 1 :(得分:1)
要更清楚地映射您的网址,您只需将网址中的值映射到操作方法中的参数。由于您使用的是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}
匹配的路线会受到影响(例如您的示例网址),并且/Something/Else/
不会产生误报。
要回答关于{id}的问题,这只是路线中定义的内容。您可以根据需要命名,例如{strap}。但是,如果您重写操作方法以接受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