ASP.NET MVC Routing构建基于当前url的链接

时间:2009-04-27 22:29:17

标签: asp.net-mvc routing

我的网址看起来像这样

~\articles\energy\topweek

~\articles\metals\latestpopular

其中第二个url字符串是一个类别,第三个是过滤器

所以路线看起来像这样

    routes.MapRoute("ArticleFilter",
     "articles/{category}/{filter}",
  new { controller="Article", action="Filter" })

这很简单,一切正常。

所以,如果我正在查看文章{category} \ default view。

如何使用过滤器构建指向当前类别的链接。

实施例: 如果是当前页面articles\energy,我需要构建article\energy\topweekarticle\energy\latestpopular

根据当前页面,类别应该是动态的。 最好是在局部视图中,以便我可以在不同的页面中使用它。

3 个答案:

答案 0 :(得分:1)

在拆分网址字符串后,使用UrlHelper类构建路径网址,以获取所需信息。

string url = "~\articles\film\topweek";
string[] parts = url.Split("\\");
string cat = parts[2];
string fil = parts[3];

string actionUrl = UrlHelper.RouteUrl("ActionFilter", new { category = cat, filter = fil });

答案 1 :(得分:1)

为usercontrol创建一个对象,使其成为这样的模型:

public class ArticleLinksControl {
    public string CategoryName { get; set; }
}

您的用户控件: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Namespace.ArticleLinksControl>" %>

假设您对ArticleController的默认操作的视图也接受包含类别名称信息的模型,您可以通过以下方式将类别名称发送到您的用户控件:

<%Html.RenderPartial("~/Views/Shared/YourControl.ascx",
    new NameSpace.ArticleLinksControl { 
        CategoryName = Model.Category}); %>

现在,在您的usercontrol中,您可以使用Model.CategoryName访问类别名称。

如果你坚持使用usercontrol来做这件事。您也可以在视图中使用Html助手。

答案 2 :(得分:0)

您必须使用Html.RouteLink(或Html.ActionLink)来构建网址。

<% Html.RouteLink('link text', routeName, new { filter = "topweek" }) %>