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

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

我试图更好地理解这个“简单”的问题,以便确定我在一个(非常)简单的网站上拥有的现有页面是否可以很容易地从 ASP.NET WebForms 转换过来。

要么是下面这个过程的“转换”,要么是另一个生命周期。

我目前正在做的事情:

(是的,我知道任何有能力回答我的问题的人都已经知道所有这些——我只是想对“生命周期”进行比较,所以我想我应该从填写我们已经知道的开始)

渲染页面:

  • 我有一个母版页,其中包含我的基本模板
  • 我有一些内容页面,它们从我放内容的母版页中提供给我命名的区域。
  • 在每个内容页的事件处理程序中,我从数据库加载数据(大多数是只读的)。
  • 我将这些数据绑定到表示网格、下拉列表或中继器的 ASP.NET 控件。这些数据都“生活”在生成的 HTML 中。其中一些内容进入了 ViewState (但我不会进入太多!)
  • 我将属性或绑定数据设置为页面上的某些项,如 Image 或 TextBox 控件。
  • 页面被发送到呈现为不可重用 HTML 的客户端。
  • 我尽量避免使用 ViewState 而不是页面最低需求。

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

  • 我可能会使用 JQuery 和一些讨厌的技巧来查找页面上的控件并对它们执行操作。
  • 如果用户从下拉列表中进行选择——就会生成一个回发,在我的代码后台触发一个 C # 事件。这个事件可能会发送到数据库,但是不管它做什么,一个完全新生成的 HTML 页面最终都会被发送回客户端。
  • 我可以使用 Page.Session 来存储以后需要重用的键值对

那么,对于 MVC,这个“生命周期”是如何改变的呢?

60271 次浏览

我将尝试对你提到的每一个要点进行评论:

您的母版页仍然存在于 MVC 中,用于为站点提供一致的布局。没什么新鲜的。

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

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

尽管 webform 风格的数据绑定在 MVC 中是可能的,但是我发现它并不是最佳的解决方案。最好将数据放在模型类中并强类型化视图,以便您可以直接访问该模型。然后只需要使用 <%= ViewData.Model.SomeProperty %>语法访问数据并在所需的位置显示它。至于 viewstate,我的建议是忘记它的存在。

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

我强烈推荐 JQuery 或者其他类似的强大的 javascript 库。但是要学会使用它们直接访问 HTMLDOM,并避免 webform 控件的 id 损坏问题。

您可以使用 jquery 连接到客户端的下拉选项,并提交标准或 Ajax 样式的请求。这些请求可以返回可用于更新现有页面的新页面、重定向、 html 片段甚至 JSON 数据。

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