2010-05-07 3 views
1

Я ASCX частичный вид с HTML-макета, как этотAsp.net Mvc конфигурируемый Html.ActionLink контроллер/метод

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

Мой ASCX является довольно большой & я хотел бы использовать его, изменив контроллер/метод в Html.ActionLink с другим контроллером/методом. Метод другого контроллера имеет ту же подпись, что и PersonController.Publications. Пожалуйста, предложите мне лучший способ, как настроить контроллер/метод для моего макета.

Спасибо заранее

ответ

1

Самый простой способ будет иметь имя контроллера и имя действия, как струны на вашей модели. Затем вы можете использовать ненавязчивую перегрузку actionlink. Что-то вроде этого:

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

И использовать его как это:

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

Если вы хотите использовать сильно типизированных версию вы можете сделать что-то вроде этого:

//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) })%> 

Вы волею конечно, нужно настроить это для параметров, которые у вас есть. Хорошая вещь о строго типизированном способе заключается в том, что методы не должны иметь одинаковые имена сигнатур и параметров.

+0

Wonderfull :) Большое спасибо! –