【问题标题】:Asp.net Mvc configurable Html.ActionLink controller/methodAsp.net Mvc 可配置 Html.ActionLink 控制器/方法
【发布时间】:2010-05-07 09:09:59
【问题描述】:

我有像这样的 html 布局的 ascx 部分视图

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

我的 ascx 很大,我想重用它,用另一个控制器/方法更改 Html.ActionLink 中的控制器/方法。另一个控制器的方法与 PersonController.Publications 具有相同的签名。请向我建议如何使控制器/方法可配置为我的布局的最佳方法。

提前谢谢你

【问题讨论】:

    标签: asp.net asp.net-mvc html.actionlink


    【解决方案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) })%>
    

    您当然必须针对您拥有的参数进行调整。强类型方法的好处是方法不必具有完全相同的签名和参数名称。

    【讨论】:

    • Wonderfull :) 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多