2010-03-03 26 views
11

我想知道什麼是在MVC中處理URL的最佳方式。例如,在我的應用程序中,我有一個PageController可以鏈接到/website/Page/Index/3/website/Page/home。該菜單是基於傳入的URL根據Html.ActionLink()和T4MVC動態構建的,所以我沒有任何硬編碼。在.Net MVC中的URL重寫

現在我想要做的是將我的網址和鏈接指向更友好的搜索引擎優化,例如,/website/our-company/,它也可以有像/website/our-company/location//website/our-company/employees/這樣的子女。你明白了。

我所有的頁面都保存到BD中,並且我的對象中有FriendlyUrlparentId屬性。

這樣做的最好方法是什麼?

+0

更好的看看: - [** ASP.NET MVC路由概述(C#)**](http://www.asp.net/learn/mvc/tutorial-05-cs.aspx) – 2010-03-03 21:55:06

+0

我現在這個東西,但我不太清楚我該怎麼做我想在這裏做什麼,是否有可能我的Html.ActionLink()將重定向到/網站/我們的公司/位置/當我指向MVC.Page.Index(12)?我的路線應該看起來像什麼,因爲我不想要「頁面」,女巫是控制器,在我的網址? – VinnyG 2010-03-03 23:52:32

回答

5

好吧,我看看http://www.asp.net/learn/mvc/tutorial-23-cs.aspx,我得到它的工作。更簡單的比我因子評分...

我的路線:

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

     routes.MapRoute("Pages3", "{url1}/{url2}/{url3}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" }); 
     routes.MapRoute("Pages2", "{url1}/{url2}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" }); 
     routes.MapRoute("Pages1", "{url1}", MVC.Page.RedirectTo(), new { url1 = "", url2 = "", url3 = "" }); 

    } 

現在我的控制器:

public virtual ActionResult RedirectTo(string url1, string url2, string url3) 
    { 
     if (string.IsNullOrEmpty(url1)) return Home(); 

     var pageModel = new PageModel(); 
     pageModel.CurrentPage = _pageRepo.GetByUrl(url1, url2, url3); 
     BuildMenusAndBreadCrumb(pageModel); 
     ViewData.Model = pageModel; 

     return View(Views.Index); 
    } 

這裏就是我如何呈現一個鏈接(我的菜單爲例):

<div class="header_menu_content"> 
<ul id="main_menu_header"> 
    <% foreach(var item in Model) {%> 
     <% if(item.Children != null){ %> 
      <li><%= Html.ActionLink(item.Title, MVC.Page.RedirectTo(item.Url, "", ""))%> 
      <ul> 
      <% foreach (var child in item.Children){ %> 
       <li><%= Html.ActionLink(child.Title, MVC.Page.RedirectTo(item.Url, child.Url, "")) %></li> 
      <% }%> 
      </ul> 
      </li> 
     <% } else { %> 
      <li class="nochild"><%= Html.ActionLink(item.Title, MVC.Page.RedirectTo(item.Url, "", "")) %></li> 
     <% } %> 
    <%} %> 
</ul> 

工作完美滿足我的需求!如果您有任何問題或意見,請不要害羞!我不確定這是做到這一點的最佳方式,但我很滿意!

請注意,路徑順序是重要的,如果你不把默認值,並在一個頁面,其中url2 =東西(網站/節/頁),那麼所有的youre鏈接將指向網站/ newsection?url2 =頁面花了我一段時間,找出爲什麼那個url2參數在那裏,但現在沒事了!