我有像这样的html-layout的ascx局部视图
<%=Html.ActionLink<PersonController>(x => x.Publications(param1, param2, ... )) %>
我的ascx非常大&amp;我想重用它,用另一个控制器/方法更改Html.ActionLink中的控制器/方法。另一个控制器的方法与PersonController.Publications具有相同的签名。请建议我如何为我的布局配置控制器/方法的最佳方法。
提前谢谢
答案 0 :(得分: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) })%>
您当然必须针对您拥有的参数进行调整。强类型方式的好处是方法不必具有完全相同的签名和参数名称。