Asp.net Mvc настраиваемый Html.ActionLink контроллер / метод - PullRequest
1 голос
/ 07 мая 2010

У меня есть частичное представление ascx с html-макетом, как это

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

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

Заранее спасибо

1 Ответ

1 голос
/ 07 мая 2010

Самый простой способ - использовать имя контроллера и имя действия в виде строки в вашей модели. Тогда вы можете использовать не строго типизированную перегрузку 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) })%>

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

...