我們正在將區域用於項目。而且我們還使用此修補程序替換頁面名稱中的破折號MVC3區域如何在頁面名稱中使用破折號
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new HyphenatedRouteHandler())
);
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
此修補程序可正常使用頂級頁面。首頁/一些頁。 但是,當涉及到一個區域,這不再起作用。我試着修改AreaRegistration.cs文件,使其等同於Global.asax.cs路由,但這也不起作用。我可以使用[ActionName(「some-page」)]重命名頁面,但它不能解決控制器仍然具有下劃線Area/some_folder/some-page的問題,我不希望我的URL看起來像這樣。
編輯: 當我使用了Darin季米特洛夫建議我得到這個錯誤路線:
多種類型的發現命名爲「頁」控制器匹配。如果爲該請求提供服務的路由('admin/{controller}/{action}/{id}')沒有指定命名空間來搜索與該請求匹配的控制器,則會發生這種情況。如果是這種情況,請通過調用帶有'namespaces'參數的'MapRoute'方法的重載來註冊此路由。
我們必須具有相同的名稱,但不同內容的多個「段」爲目標的段觀衆
這就是我重寫它的方式,它似乎沒有工作。我得到了404。我仍然可以在名稱中使用_時進入頁面,但是 - 版本給了我404。 – ddilsaver 2012-03-06 16:13:39
其實我得到一個錯誤。我正在編輯帖子,以便您可以看到它。 – ddilsaver 2012-03-06 16:17:51
@ddilsaver,它看起來你有多個區域定義相同的控制器。您將需要使用命名空間約束來解決這些衝突。我已更新我的帖子,以說明如何實現這一目標。 – 2012-03-06 16:46:35