我的网址看起来像这样
~\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\topweek
和article\energy\latestpopular
。
根据当前页面,类别应该是动态的。 最好是在局部视图中,以便我可以在不同的页面中使用它。
答案 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" }) %>