ASP.NET MVC Routing создает ссылки на основе текущего URL - PullRequest
3 голосов
/ 28 апреля 2009

У меня есть URL, которые выглядят так

~\articles\energy\topweek

~\articles\metals\latestpopular

где вторая строка URL является категорией, а третья - фильтром

маршрут выглядит так

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

Это довольно просто, и все работает отлично.

Итак, допустим, я смотрю на статьи {категория} \ вид по умолчанию.

Как мне создать ссылки, чтобы указать на текущую категорию с фильтрами.

Пример: Если текущая страница articles\energy, мне нужно построить article\energy\topweek и article\energy\latestpopular.

Где категория должна быть динамической в ​​зависимости от текущей страницы. желательно в частичном виде, чтобы я мог использовать его на разных страницах.

Ответы [ 3 ]

1 голос
/ 28 апреля 2009

Создайте объект для вашего 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}); %>

Теперь в вашем пользовательском контроле вы можете получить доступ к названию категории с помощью Model.CategoryName.

Это если вы настаиваете на использовании пользовательского контроля для этого. Вы также можете избежать использования Html-помощников в своем представлении.

1 голос
/ 28 апреля 2009

Используйте класс UrlHelper для создания URL-адресов маршрутов после разделения строк URL-адресов для получения необходимой информации.

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 });
0 голосов
/ 28 апреля 2009

Вы должны использовать Html.RouteLink (или Html.ActionLink) для построения URL.

<% Html.RouteLink('link text', routeName, new { filter = "topweek" }) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...