Asp.net mvc 4 ASP.NET MVC4-实际的数据流是什么?

Asp.net mvc 4 ASP.NET MVC4-实际的数据流是什么?,asp.net-mvc-4,Asp.net Mvc 4,我经常听说和读到ASP.NETMVC4中的交互流是控制器->模型->视图 但是,如果说这个流实际上是Http Get上的流,而Http Post上的流是View->Controller->Model->Controller->View(相同或不同-无所谓),这难道不准确吗 这取决于您将什么分类为“视图”。在POST中,根本没有运行服务器端视图代码,只有浏览器端代码。在响应流中,将在服务器上为GET(可能还有POST)将一些视图渲染成HTML。我想说的是,大多数人在谈论ASP.NET MVC流时

我经常听说和读到ASP.NETMVC4中的交互流是控制器->模型->视图

但是,如果说这个流实际上是Http Get上的流,而Http Post上的流是View->Controller->Model->Controller->View(相同或不同-无所谓),这难道不准确吗


这取决于您将什么分类为“视图”。在POST中,根本没有运行服务器端视图代码,只有浏览器端代码。在响应流中,将在服务器上为GET(可能还有POST)将一些视图渲染成HTML。我想说的是,大多数人在谈论ASP.NET MVC流时都会提到这一点。

不是。视图是一种仅输出的媒体,它被呈现(通常是HTTP响应并发送到客户端);它不会接收发送到服务器的任何数据,也不会直接对其作出反应


对于任何Http请求,不管动词是什么,您的“Http Get”图表都是正确的。首先,请求进入服务器,路由引擎决定将其发送到哪里——这很可能是一个控制器。然后控制器开始工作,必要时调用模型绑定器。这就是幕后发生的神奇之处,在这里,您可以使用控制器方法
ActionResult Foo(MyComplexModel model)
,并将请求数据中的值分配给参数,同时执行验证。接下来是控制器中的代码,它很可能调用一个视图,将其呈现到响应流中。

否,POST的图表与GET相同。 当您发布表单o进行post vía Ajax时,您是针对控制器的操作进行发布。

  • 控制器验证数据的请求和调用模型
  • 模型除了验证输入和控制流之外什么都做
  • 控制器渲染视图或控制应用程序流,直到 流动
  • 视图在应用程序流结束时呈现
要将HTTP流与MVC混合使用,我认为您可以这样枚举:

  • Http Get请求控制器验证输入(路由、参数等)

  • 模型执行“应用程序逻辑”,比如执行一些算法,调用 Db等可能需要“数据建模”,如ViewModels(ViewModel 可能负责对视图进行建模)

  • 控制器拾取特定视图和视图模型

  • 视图将呈现并显示给用户。客户端视图逻辑 可以在视图中发生,如验证表单或执行更多请求。 (为了简单起见,我将其排除在流程之外)

    假设我填写一张表格并提交

  • Http Post从视图中请求一些数据

  • 控制器验证数据,模型执行业务逻辑和控制器 重定向到Http Get(重新启动)

  • 总之,您最终在Get-verb上提供视图,向控制器提交Post-verb上的修改,然后模型执行任何操作,但输入验证和流控制,并最终重定向到另一个Get-verb

    只有当您使用PRG模式时,这才是真正推荐的最佳实践


    这对你有意义吗?

    Josh,谢谢你花时间。我想我明白你的意思。让我看看能否用一个例子改写你说的话。比方说,“提交”按钮不算作与控制器交互的视图(浏览器端代码),该部分被跳过。只有当post请求到达服务器时,它才算是控制器,接收请求,做它需要做的任何事情,并向用户返回一些其他视图。这就是你的意思吗?是的,这正是我的意思。实际上,你把视图上的视图模型发布到控制器操作中。我认为这就是图表的想法…@Bart-no。您不发布viewmodel,而是发布一组名称-值对(如果使用标准数据格式),或者可能是一个数据块(如果是文件或json数据)。这些可能会映射到视图模型,也可能不会。。但是您实际上并没有发布一个实际的ViewModel本身?我真的很感谢你的评论。有点不相关,但别忘了“Post/Redirect/Get”模式,这是一种处理帖子的安全方式: