2010-03-03 20 views
11

MVC'de URL'yi işlemenin en iyi yolunun ne olduğunu merak ediyorum. Örneğin, uygulamamda PageController var, /website/Page/Index/3 veya /website/Page/home'a bağlanabilir. Menü, gelen URL'leri temel alarak Html.ActionLink() ve T4MVC ile dinamik olarak oluşturulur, bu yüzden kodlanmış bir şey yok.URL Yeniden Yazma .Net MVC

Yapmak istediğim şey, URL'mi ve bağlantıyı daha fazla bir şeyle ilgili olarak örneğin /website/our-company/ gibi bir noktaya yönlendirmek ve /website/our-company/location/ veya /website/our-company/employees/ gibi çocuklara sahip olabilir. Kaptın bu işi.

Tüm Sayfalarım BD'ye kaydedilir ve benim nesnedeki FriendlyUrl ve parentId özelliklerine sahibim.

Bunu yapmanın en iyi yolu nedir?

+0

Daha iyi bir göz atın: - [** ASP.NET MVC Yönlendirmeye Genel Bakış (C#) **] (http://www.asp.net/learn/mvc/tutorial-05-cs.aspx) –

+0

I şimdi bu şeyler ama burada yapmaya çalıştığım şeyi nasıl yapabileceğimi tam olarak bilmiyorum, Html.ActionLink() 'i işaret ettiğimde/web sitesine/firmamıza/konumumuza yönlendirmem mümkün mü? MVC.Page.Index (12)? Ve benim rotam, "Sayfa" istemediğimden nasıl görünmeli, cadı denetleyicim, URL'mdeki kısım mı? – VinnyG

cevap

5

Ok http://www.asp.net/learn/mvc/tutorial-23-cs.aspx'a bir göz attım ve çalıştım. Ben tought daha fazla basit ...

Benim yolları: burada

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); 
    } 

Ve (benim menü exemple) bir bağlantı işlemek nasıl:

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 = "" }); 

    } 

Ve şimdi kontrolör

<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> 

Work ihtiyaçlarım için mükemmel! Herhangi bir sorunuz veya yorumunuz varsa utanma! Bunu yapmanın en iyi yolu olduğundan emin değilim ama bununla mutlu oluyorum!

Rota sırasının önemli olduğunu ve ayrıca varsayılan değeri koymadığınız ve url2 = bir şeyin (site/bölüm/sayfa) bulunduğu bir sayfada olduğunuzu unutmayın, bu durumda tüm bağlantınız site/habere işaret edecektir? Url2 = sayfa, url2 paramının neden orada olduğunu anlamak için biraz zaman aldı ama şimdi her şey yolunda!

İlgili konular