列出ASP.MVC中的所有视图

时间:2014-08-20 21:10:42

标签: c# asp.net-mvc razor views

是否可以使用相对路径列出项目中的所有视图?无需手动静态输入所有视图。

我查看了Razor名称空间和类以及ViewEngine名称空间和类,并且无法自己查看。

3 个答案:

答案 0 :(得分:1)

这可能是一个古老的问题,但这是可行的。

选项1

您需要从Global.asax文件中检索程序集名称。应该将名称空间和第一个公共类组合在一起,以在下面获得程序集名称。

namespace XYZ
{
    public class MvcApplication : System.Web.HttpApplication

程序集为 XYZ.MvcApplication

下面的查询将检索ASP.NET MVC项目中所有控制器和操作方法的列表。下面的代码将帮助您将其枚举为一个视图。

    @using System.Reflection;
    @{
        ViewBag.Title = "Dashboard";

        Assembly asm = Assembly.GetAssembly(typeof(XYZ.MvcApplication));

    var paths = asm.GetTypes()
    .Where(type => typeof(System.Web.Mvc.Controller).IsAssignableFrom(type))
    .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
    .Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
    .Select(x => new { Controller = x.DeclaringType.Name.Replace("Controller", null), Method = x.Name })
    .OrderBy(x => x.Controller).ThenBy(x => x.Method).ToList();
    }


                <table class="table table-bordered table-condensed table-striped">
                    <thead>
                        <tr>
                            <th>Controller</th>
                            <th>Method</th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach (var i in paths)
                        {
                            <tr>
                                <td>@i.Controller</td>
                                <td>@i.Method</td>
                            </tr>
                        }
                    </tbody>
                </table>

选项2

非技术同事还有另一种选择,可以获取视图中使用的文件列表。

使用名为 Freeplane 的免费软件来获得以下结果。

Free Plane >> Import Folder Structure

请使用文件>>导入>>文件夹结构功能来获取所需的特定视图。

Import Views Folder Structure

然后可以使用文件>>导出地图将其导出为Excel文件

答案 1 :(得分:0)

如果只想查看所有视图列表,只需检查〜/ Views目录下的文件(Server.MapPath)。我认为没有必要反思。

答案 2 :(得分:-2)

使用以下链接获取所有视图,而不使用其相对路径:

http://t4mvc.codeplex.com/

e.g。而不是

@Html.ActionLink("Delete Dinner", "Delete", "Dinners", new { id = Model.DinnerID }, null)

T4MVC允许你写

@Html.ActionLink("Delete Dinner", MVC.Dinners.Delete(Model.DinnerID))