与ASP.NET WebForms相比,ASP.NET MVC页面的“页面生命周期”是什么?


158

与ASP.NET WebForms相比,ASP.NET MVC页面的“页面生命周期”是什么?

我正在尝试更好地理解此“简单”问题,以确定是否可以轻松地从ASP.NET WebForms转换(非常)简单站点中的现有页面。

我正在寻找以下过程的“转换”,或者替代的生命周期。

我目前正在做什么:

(是的,我知道任何能够回答我的问题的人都已经知道这一切-我只是想对“生命周期”进行比较,所以我想我首先要填写我们已经知道的东西)

呈现页面:

  • 我有一个包含基本模板的母版页
  • 我有内容页面,这些页面为我提供放置内容的母版页中的命名区域。
  • 在每个内容页面的事件处理程序中,我从数据库中加载数据(通常是只读的)。
  • 我将此数据绑定到代表网格,下拉列表或转发器的ASP.NET控件。这些数据全部“存在”在生成的HTML内。其中一些进入ViewState(但我不会过多介绍它!)
  • 我设置属性或将数据绑定到页面上的“图像”或“文本框”控件之类的某些项目。
  • 该页面被发送到呈现为不可重用HTML的客户端。
  • 我尽量避免使用ViewState,而不是页面所需的最低要求。

客户端(不使用ASP.NET AJAX):

  • 我可能会使用JQuery和一些讨厌的技巧在页面上查找控件并对其执行操作。
  • 如果用户从下拉菜单中进行选择-则会生成回发,这会触发我的代码背后的C#事件。该事件可能会进入数据库,但是无论执行什么操作,都会完全重新生成一个HTML页面,最终将其发送回客户端。
  • 我可能会使用Page.Session来存储键值对,以后需要重用

那么借助MVC,这个“生命周期”将如何改变?


2
我的书签中的一些引用突出了请求管道在ASP.NET MVC中的工作方式。这通常会有所帮助1.了解ASP.NET MVC本身2.了解MVC提供的不同注入点是什么,并对其进行理解。https://docs.google.com/open?id=0B0_EIyBZvSQsOTU3N2Q2NDEtMWNjMS00ZTc0LWJmMjUtM2I0M2I5NDY2ZDNl [ simple-talk.com/content/article.aspx?article=1358](https://...
humblelistener


Answers:


39

我将尝试评论您提到的每个要点:

您的母版页仍存在于MVC中,并用于为站点提供一致的布局。那里没有太多新东西。

您的内容页面将成为MVC世界中的视图。它们仍为您的母版页提供相同的内容区域。

Web表单的事件处理不应在MVC中使用,相反,您的Controller类及其操作方法将处理将数据加载到传递给视图的“模型”中。

尽管在MVC中可以使用Webform样式进行数据绑定,但我发现这不是最佳解决方案。最好将数据放置在模型类中,并强烈键入视图,以便您可以直接访问该模型。然后,只需使用<%= ViewData.Model.SomeProperty %>语法来访问数据并将其显示在所需位置即可。至于viewstate,我的建议是忘记它甚至存在。

请记住,使用MVC的优点之一是您可以控制发送给客户端的HTML。拥抱这种力量,并尝试找到允许您保持该控件的解决方案。Webform控件试图向您隐藏html,因此,在需要时更难以自定义html。

我强烈建议使用JQuery或其他功能相似的javascript库之一。但是,学会使用它们直接访问HTML DOM,并避免Webform控件的id修改问题。

您可以使用jquery挂接到客户端的下拉菜单中,然后提交标准或ajax样式的请求。这些请求可以返回新页面,重定向,html片段,甚至可以用于更新现有页面的JSON数据。

可以根据需要使用asp.net会话。


感谢您的详细回答。实际上是JQuery使我回到了MVC。我曾短暂地看过它,然后将其关闭(至少现在是这样)。与JQuery一起玩并试图在DOM中查找东西变得太痛苦了,所以我认为我会尝试回到MVC并了解更多信息
Simon_Weaver

MVC页面具有Model访问模型的属性,您不必通过ViewData
Tsahi Asher 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.