我有一个导航页面,我想当点击创建导航我显示下拉列表 包括控制器名称和选择一个控制器,然后在另一个下拉列表中显示相关的操作
那么如何才能找到我的控制器名称和动作?
答案 0 :(得分:2)
我确实为控制器和行动做了沉重的工作。此代码生成包含列表项的无序列表,可以在视图中删除。您可以使用自己喜欢的jquery menu plugin将此列表转换为具有所需效果的菜单。
此代码可以轻松地重构为使用控制器和(部分)视图的解决方案,以防您需要重复使用此代码段。
<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>