URL Rewriting in .Net MVC

后端 未结 1 1103
盖世英雄少女心
盖世英雄少女心 2020-12-01 12:54

I\'m wondering what is the best way to handle URL in MVC. For example, in my application I have a PageController can link to /website/Page/Index/3

相关标签:
1条回答
  • 2020-12-01 13:39

    I took a look at http://www.asp.net/learn/mvc/tutorial-23-cs.aspx and I got it working. More simple than I thought...

    My routes :

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

    And now my controller :

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

    And here's how I render a link (my menu exemple) :

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

    Works perfectly for my needs! If you have any question or comments don't be shy! I'm not sure it's the best way to do it but I'm happy with it!

    Note that the route order is important and also, if you don't put the default value and are in a page where url2 = something (site/section/page) then all your link will point to site/newsection?url2=page took me a while to figure out why that url2 param was there but now it's all right!

    0 讨论(0)
提交回复
热议问题