在我看来,当我使用View和Controllers时,Controllers只处理各自文件夹的第一级。
/Controllers/MembersController
/Views/Members/
Controller如何处理子文件夹?
/Views/Members/Business
答案 0 :(得分:5)
控制器不是。如果您想要 url /Views/Members/Business/ThePage
上的网页,则可以在global.asax.cs中使用路由定义解决该问题。如果您需要将视图放在子文件夹中以进行组织,则应考虑拆分控制器。
更新以回应您的评论。
简而言之:是的,路由定义负责选择控制器应该处理您的请求。
似乎有关MVC框架如何设计使用的稍微详细的演练可能已经到位。我会保持这个基本的,并跳过关于框架内部工作的所有内容。 (这会让一些高级读者认为我说的是错误的东西。请耐心等待我 - 我只是故意草率......)这就是......
当请求从浏览器提交到您的Web服务器时,MVC框架会转到路由定义以查看请求的发送位置。它按照您定义它们的顺序查看它们,首先是顶部,所以如果有多个匹配,则只有第一个匹配。 (因此,您希望在底部保留非常一般的路线,例如默认路线。)
当框架确定路由匹配时,它会查找url应路由到的控制器和操作。它使用来自url的数据填充所有操作参数,并调用操作方法。
控制器上的操作方法现在负责成为“网络中心的蜘蛛”,它负责处理响应所需的一切工作。这可能包括查询模型的数据,调用各种库方法进行计算或几乎任何其他方法。控制器方法的最后一步是确定应该返回什么响应 - 在大多数基本情况下,响应应该是一个视图,返回它的代码是return View();
。
视图(或您正在返回的任何其他结果)可能从控制器获取一些数据,然后负责正确呈现此数据。当视图完成其工作时,框架将其提供给客户端。
正如您所看到的,应该调用哪个控制器操作的决定要比返回结果应该是什么的决定(步骤3结束)要早得多(步骤1和步骤2),并且它们中的两个都不是'甚至必然相互关联。
要在您的应用程序中反映这一点,您希望拥有与可用控制器及其操作方法相对应的控制器和视图的文件夹和文件结构(至少可以返回ViewResult
的那些),以及一个路径集合,它反映了您希望用户使用哪些URL来获取这些控制器操作。通过定义比默认路由更多的路由,您可以获得各种url结构,而无需更改控制器/操作方法/视图结构。
如果所有这些看起来仍然是决定的迷宫,那么去http://www.asp.net/mvc/观看一些学习视频或阅读一些教程可能是合适的。有一些非常好的视频和文本,关于框架如何工作,以及如何使用它。
答案 1 :(得分:4)
在您的控制器操作中,您可以从任何您想要的文件夹中返回视图:
return View("/Views/Members/Business/Index.aspx", model);
答案 2 :(得分:1)
如果有人仍对解决方案感兴趣,MVC会有一个名为“区域”的东西,允许您定义子文件夹。
http://msdn.microsoft.com/en-us/library/ee461420%28v=VS.100%29.aspx