-1

我有一个导航页面,我想要点击创建导航时,我会显示包含控制器名称的下拉目,然后在另一个下拉列表中选择一个控制器时

那么如何找到我的控制器名称和操作?

4

1 回答 1

2

我确实为控制器和动作做了繁重的工作。此代码会生成一个包含列表项的无序列表,并且可以将其拖放到您的视图中。您可以使用您最喜欢的jquery 菜单插件,将此列表转换为具有所需效果的菜单。

此代码可以轻松重构为使用控制器和(部分)视图的解决方案,以防您需要重用此代码段。

<ul>
@{
    var allTypes = 
            from asm 
            in AppDomain.CurrentDomain.GetAssemblies()
            let types = (
                from type 
                in asm.GetTypes()
                let contname = type.Name.Replace("Controller","")
                let methods = (
                    from method 
                    in type.GetMethods()
                    let hasHttpPost =
                        method.GetCustomAttributes(
                            typeof(HttpPostAttribute),
                            false).Length > 0
                    where (method.ReturnType.IsSubclassOf(
                                    typeof(ActionResult))
                    || method.ReturnType == typeof(ActionResult))
                    && !hasHttpPost
                    select new
                    {
                        Controller = contname,
                        Action = method.Name
                    }
                )
                where type.IsSubclassOf(typeof(Controller))
                select new {Name = contname, Controllers = methods }
                )
            select new { asm.FullName, AllControllers = types };


    foreach (var controllers in allTypes)
    {
        foreach (var controller in controllers.AllControllers)
        {
            <li>
            @controller.Name
            <ul>
            @{
            foreach (var controlleraction in controller.Controllers)
            {
              <li>
                <a href="@controlleraction.Controller/@controlleraction.Action">
                  @controlleraction.Action
                </a>
              </li>
            }
            }
            </ul>
            </li>
        }
    }
}
</ul>
于 2012-06-02T14:33:49.477 回答