2009-04-27 8 views
3

je urls qui ressemblent à ceASP.NET MVC routage liens construct basé sur l'URL actuelle

~\articles\energy\topweek

~\articles\metals\latestpopular

où la deuxième chaîne url est une catégorie et troisième est un filtre

donc route ressemble à ceci

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

C'est assez facile et tout fonctionne bien.

Alors disons si je regarde les articles {category} \ default view.

Comment construire des liens pour pointer vers la catégorie actuelle avec des filtres.

Exemple: Si page en cours articles\energy, je dois construire article\energy\topweek et article\energy\latestpopular.

Lorsque la catégorie doit être dynamique en fonction de la page en cours. de préférence dans une vue partielle afin que je puisse l'utiliser sur différentes pages.

Répondre

1

Créer un objet pour votre usercontrol de prendre comme modèle comme celui-ci:

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

Et votre contrôle utilisateur: <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Namespace.ArticleLinksControl>" %>

En supposant que votre point de vue de l'action par défaut du ArticleController accepte également un modèle qui contient les informations sur le nom de la catégorie, vous pouvez envoyer le nom de la catégorie à votre contrôle de l'utilisateur de cette façon:

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

Maintenant dans votre usercontrol vous pouvez accéder au nom de la catégorie avec Model.CategoryName.

Ceci est si vous insistez sur l'utilisation d'un usercontrol pour cela. Vous pouvez également vous en tirer en utilisant des aides HTML sur votre vue.

1

Utilisez la classe UrlHelper pour construire les URL de routage, après avoir scindé les chaînes d'URL pour obtenir les informations dont vous avez besoin.

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

Vous devez utiliser Html.RouteLink (ou Html.ActionLink) pour créer l'URL.

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