ASP.NET MVC如何将页面名称与类名相关联?

时间:2015-05-07 12:24:20

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

我是ASP.NET MVC的新手,我对如何使用C#这样的编译语言感到困惑,类名在构建项目后可能有任何意义。有人可以向我解释构建过程是如何进行的吗

public class SomePageController : Controller {
     public ActionResult Index() { return View(); }
}

并抓取名称SomePageIndex以创建调用函数SomePage/Index的网址映射Index()?我只知道如果有其他C#文件以某种方式能够查看从Controller类派生的所有类并获得一个不带后缀"Controller"的名称的字符串,我才能理解这是如何工作的。但是,对于我来自C ++背景,这似乎很奇怪,因为我从未见过一种语言可以引用变量引用自己名称的方式,也从未见过迭代通过某个类派生的所有类的方法。

也许有人可以告诉我如何编写像

这样的C#程序
public class SomePageController : Controller {
     public ActionResult Index() { return View(); }
}

public class SomeOtherPageController : Controller {
     public ActionResult Index() { return View(); }
}

public void printPageNames ( void )
{
    // ... Will print "SomePage, SomeOtherPage" to the console
}

1 个答案:

答案 0 :(得分:2)

您需要阅读的内容是Reflection。它允许您查看程序集中的所有类,属性等。

直接回答您的问题,Jon Skeet has the starting point如何完成此任务。

您的代码看起来像这样:

var assembly = Assembly.GetExecutingAssembly();

foreach (var controller in assembly.GetTypes().Where(a => a.Name.EndsWith("Controller"))
{
    Console.WriteLine(controller.Name.TrimEnd("Controller"));
}