且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

URL重写在.net MVC

更新时间:2023-11-26 22:58:04

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

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

我的路线:

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!

请注意,该航线顺序是很重要而且,如果你不把默认值,并在一个页面,网址2 =东西(网站/节/页),则所有的youre链接将指向网站/ newsection?URL2 =页我花了一段时间才能找出为什么URL2参数是有,但现在它的所有权利!

Note that the route order is important and also, if you dont put the default value and are in a page where url2 = something (site/section/page) then all youre 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!