2012-04-14 109 views
0

我無法在任何地方找到此問題的答案。ASP.NET MVC3動態路由

我需要創建一個表單,用戶可以在其中創建帖子並將帖子更改爲帖子。

例如,如果默認路由是

http://www.domain.com/posts/[the-title-of-the-post] 

用戶可以改變這

http://www.domain.com/[modified-title-of-the-post]. 

[modified-title-of-the-post]可以是任何用戶想做到這一點。 這意味着它不再與帖子的標題綁定,不僅僅是這樣,而且/posts/也沒有了。

我想我應該還提到,這應該是全球性的,這意味着用戶應該能夠更改URL(如上所述),其他的東西在等網站,/topics//blog/

任何幫助將是大爲讚賞,

感謝, Hiva的

回答

2

您可以創建在Global.asax的兩條路線。事情是這樣的

routes.MapRoute("", "posts/{url}", new { controller = "Home", action = "Posts" }); 
routes.MapRoute("", "{url}", new { controller = "Home", action = "Posts" }); 

他們都指向HomeController和行動Posts

public ActionResult Posts(string url) 
{ 

} 

天天看網址,你應該考慮延長RouteBase

類似的東西應該做的

public class CustomRouting : RouteBase 
{ 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
    RouteData result = null; 
    string requestUrl = httpContext.Request.AppRelativeCurrentExecutionFilePath; 

    //Handle the request 
    //Compile the RouteData with your data 
    result = new RouteData(this, new MvcRouteHandler()); 
    result.Values.Add("controller", "MyController"); 
    result.Values.Add("action", "MyAction"); 
    result.Values.Add("id", MyId); 
    } 
    } 
    return result; 
} 

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
{ 
    //I only need to handle outbound so here is ok 
    return null; 
} 

}

在Global.asax中註冊您的自定義路由處理

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

    routes.Add(new CustomRouting()); 

    routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
} 
+0

我想我應該還提到,這應該是全球性的,這意味着用戶應該能夠更改URL(如上所述)的對網站上的其他內容就像/ topics/or/blog/ – hjavaher 2012-04-14 09:37:37

+0

那麼您應該實現自己的路由處理,也許基於DB的表格。看起來實現RouteBase類。 – Iridio 2012-04-14 09:43:45

+0

哇,這是一個很棒的解決方案:)謝謝! – hjavaher 2012-04-14 17:43:22