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