1

そのようなhtmlレイアウトのascx部分ビューがあります

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

私の ascx はかなり大きいので、Html.ActionLink のコントローラー/メソッドを別のコントローラー/メソッドに変更して再利用したいと思います。別のコントローラーのメソッドは、PersonController.Publications と同じ署名を持っています。私のレイアウト用にコントローラー/メソッドを構成可能にする最良の方法を教えてください。

前もって感謝します

4

1 に答える 1

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

もちろん、お持ちのパラメータに合わせてこれを調整する必要があります。厳密に型指定された方法の良い点は、メソッドのシグネチャとパラメーター名がまったく同じである必要がないことです。

于 2010-05-07T09:52:57.947 に答える