【发布时间】:2011-11-14 13:16:20
【问题描述】:
我是 MVC 的新手,我可能还没有完全理解它的逻辑,这就是为什么我总是遇到麻烦。
在我看来,MVC 应该将 Web 应用程序的三个部分分开:模型(处理数据:获取、更改等)、控制器(根据用户决定返回哪些数据作为响应请求)和视图(将来自控制器的数据(例如,转换为 HTML)作为响应发送回用户)。
“分离”意味着这三个元素彼此抽象。 Controller不关心Model部分的实现细节(反之亦然),它只是告诉他需要获取(或改变)哪些数据并知道如何处理,Model与视图(即数据转换的方式)。 最后,Controller 与 View 转换无关,他只知道需要转换哪些数据(取决于请求)以及以何种方式转换(例如,为当前数据选择正确的模板)。 而 View 部分是从 Controller 中抽象出来的,它的工作是以某种预设的方式转换特定的输入数据数组。
所以现在假设我有一个网站。它有索引页(/)和一些非索引页(/vacancy/、/about/、/articles/bytag/fun/5/ 等)。 在每一页的顶部都有一个标志。问题是:我希望徽标成为除索引页面本身之外的每个页面上的索引页面的超链接(因为我不希望我的页面包含指向自身的超链接)。 所以我想要索引页面上的“”和其他页面上的“”。 p>
当然,我不想重复自己并创建多个具有相同徽标图像的模板(header_index 和 header_nonindex)。所以,我需要做的是检查我是否在模板某个位置(即视图部分内)的索引页面上,并根据结果添加或不添加链接标签。
在这里我面临一个逻辑问题。我无法在视图中获取地址(因为逻辑上这部分与用户请求无关,它转换数据,从控制器接收)。 所以我需要我的控制器将特定数据(例如页面地址,或像“isIndex”这样的布尔值)发送到视图。但是视图不能“要求”来自控制器的数据,视图只是数据转换的方式。因此,如果转换本身需要任何特定变量,将其添加到 Controller 将使 View 依赖于特定 Controller 和 Controller - 与特定 View 相关,这将破坏抽象和分离的整个想法。 因此,如果不破坏 MVC 逻辑,就无法做我需要的事情。
我错了哪一部分?
【问题讨论】:
-
这是C#和ASP.NET MVC 3和Razor还是纯学习理论?
-
比方说,纯学习理论。