1

サイト内のすべてのアクションのアクション リンクを作成するにはどうすればよいですか?
これらのアクション リンクをメニュー システムに配置したいと考えています。

私は次のようなことができることを望んでいました

foreach controller in controllers {
    foreach action in controller{
        stringbuilder.writeline(
            "<li>"+actionlink(menu, action, controller)+"<li>"
        );
    }
}
4

2 に答える 2

2

これが私の見解です:

var controllers = Assembly.GetCallingAssembly().GetTypes().Where(type => type.IsSubclassOf(typeof(Controller))).ToList();
var controlList = controllers.Select(controller =>
                                     new
                                     {
                                         Actions = GetActions(controller),
                                         Name = controller.Name,
                                     }).ToList();

方法は次のGetActionsとおりです。

public static List<String> GetActions(Type controller)
{
    // List of links
    var items = new List<String>();

    // Get a descriptor of this controller
    var controllerDesc = new ReflectedControllerDescriptor(controller);

    // Look at each action in the controller
    foreach (var action in controllerDesc.GetCanonicalActions())
    {
        // Get any attributes (filters) on the action
        var attributes = action.GetCustomAttributes(false);

        // Look at each attribute
        var validAction =
            attributes.All(filter => !(filter is HttpPostAttribute) && !(filter is ChildActionOnlyAttribute));

        // Add the action to the list if it's "valid"
        if (validAction)
           items.Add(action.ActionName);
    }
    return items;
}

MVC Sitemap Providerをチェックアウトするメニュー システムが必要な場合は、メンバーシップの実装で定義したロールに応じて、何をレンダリングするかを完全に制御できます。

于 2013-04-06T15:22:21.423 に答える
0

コントローラーAsp.net Mvcからすべてのアクションを取得する方法は次のとおりです。 特定の属性を持つコントローラーのすべてのアクションを一覧表示するまたはASP.NET MVC アプリケーションでコントローラー/アクションのリストにアクセス する 目標を達成するには、すべてのコントローラーを見つける必要があります2番目のリンクからの各コントローラー呼び出しAssembly.GetExportedTypes()のサブクラスのみを使用してプロジェクトし、フィルターします。ControllerBasenew ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()

于 2013-04-05T22:46:09.203 に答える