我总是听到并读到 ASP.NET MVC4 中的交互流程是控制器 -> 模型 -> 视图。
但是不准确的说这个流程其实就是一个Http Get上的流程,一个Http Post上的流程是View -> Controller -> Model -> Controller -> View(相同或不同-不事情)?
我总是听到并读到 ASP.NET MVC4 中的交互流程是控制器 -> 模型 -> 视图。
但是不准确的说这个流程其实就是一个Http Get上的流程,一个Http Post上的流程是View -> Controller -> Model -> Controller -> View(相同或不同-不事情)?
这取决于您将什么归类为“视图”。在 POST 的情况下,根本没有运行服务器端 View 代码,只有浏览器端代码。在响应流中,将在服务器上将一些视图呈现为用于 GET(可能还有 POST)的 HTML。这就是我想说大多数人在谈论 ASP.NET MVC 流时所指的。
不,视图是一个仅输出的媒体,它被渲染(通常是 HTTP 响应并发送到客户端);它不接收或直接响应发送到服务器的任何数据。
无论动词如何,“Http Get”的图表都适用于任何 HTTP 请求。首先,请求进入路由引擎决定将其发送到哪里的服务器——这很可能是一个控制器。然后控制器开始工作,在必要时调用模型绑定器。这负责幕后发生的魔术,您可以在其中拥有一个控制器方法ActionResult Foo(MyComplexModel model)
,并将请求数据中的值分配给参数,同时执行验证。下面是控制器中的代码,它很可能调用一个视图,将其呈现给响应流。
不,POST 的图表与 GET 相同。当您发布表单或通过 Ajax 发布帖子时,您发布的是针对控制器的操作。
要将 HTTP 流与 MVC 混合,我认为您可以这样枚举:
Http Get Request Controller 验证输入(路由、参数等)
模型执行“应用程序逻辑”,例如执行一些算法、调用 Db 等。可能需要像 ViewModels 一样的“数据建模”(ViewModel 可能负责对视图进行建模)
控制器选择一个特定的视图和 ViewModel。
视图被渲染并显示给用户。客户端又名视图逻辑可以发生在视图中,例如验证表单或执行更多请求。(为简单起见,我将其排除在外)
假设我填写表格并提交
Http Post 从视图中请求一些数据。
控制器验证数据,模型执行业务逻辑,控制器重定向到 Http Get(重新开始)
总之,您最终在 Get 动词上提供 Views,提交给控制器以对 Post 动词进行修改,并且模型除了输入验证和流控制之外做任何事情,并最终重定向到另一个 Get 动词。
仅当您使用真正推荐作为最佳实践的 PRG 模式时才这样做。
你能理解这个吗 ?