2010-05-07 4 views
1

J'ai ASCX vue partielle avec html-layout commeAsp.net Mvc contrôleur Html.ActionLink configurable/méthode

<%=Html.ActionLink<PersonController>(x => x.Publications(param1, param2, ...)) %> 

Mon ascx est assez grand & Je voudrais réutiliser, changer contrôleur/méthode dans Html.ActionLink avec un autre contrôleur/méthode. La méthode d'un autre contrôleur a la même signature que PersonController.Publications. S'il vous plaît, suggérez-moi le meilleur moyen de rendre le contrôleur/méthode configurable pour ma mise en page.

Nous vous remercions à l'avance

Répondre

1

La façon la plus simple serait d'avoir le nom du contrôleur et le nom de l'action en tant que chaînes sur votre modèle. Ensuite, vous pouvez utiliser la surcharge non typée de l'actionlink. Quelque chose comme ceci:

<%=Html.ActionLink(Model.Action, Model.Controller, new { param1 = 1, param2 = 2 })%> 

Et l'utiliser comme ceci:

<%Html.RenderPartial("PartialName", new PartialModel{Controller = "Person", Action = "Publications"})%> 

Si vous souhaitez utiliser la version fortement typé que vous pouvez faire quelque chose comme ceci:

//Model for your partial view 
public class PartialModel<TController> where TController : Controller 
{ 
    public Func<int, int, Expression<Action<TController>>> GetLinkAction { get; set; } 
} 

//Render the action link in your partial 
<%=Html.ActionLink(Model.GetLinkAction(1, 2))%> 

//Render the partialview in any page 
<%Html.RenderPartial("PartialName", new PartialModel<PersonController> { GetLinkAction = (param1, param2) => x => x.Publications(param1, param2) })%> 

Vous aurez bien Bien sûr, il faut ajuster cela pour les paramètres que vous avez. La bonne chose à propos de la méthode fortement typée est que les méthodes n'ont pas nécessairement les mêmes noms de signature et de paramètre.

+0

Wonderfull :) Merci beaucoup! –

Questions connexes