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

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

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

无论是“转换”下面的过程,还是一个替代的生命周期将是我正在寻找的。

我现在在做什么:

(是的,我知道有人能够回答我的问题已经知道这一切 – 我只是试着比较一下“生命周期”,所以我想我会开始填写我们已经知道的)

呈现页面:

  • 我有一个母版页,其中包含我的基本模板
  • 我有内容页面给我从母版页到我把内容命名区域。
  • 在每个内容页面的事件处理程序中,我从数据库加载数据(大部分是只读的)。
  • 我将这些数据绑定到表示网格,下拉菜单或中继器的ASP.NET控件。 这些数据全部“生命于”生成的HTML内部。 它的一些进入ViewState(但我不会进入太多!)
  • 我设置属性或将数据绑定到某些项目,如页面上的图像或文本框控件。
  • 该页面被发送到客户端呈现为不可重用的HTML。
  • 我尽量避免使用ViewState,而不是页面所需的至less。

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

  • 我可能会使用JQuery和一些令人讨厌的技巧来查找页面上的控件,并对其执行操作。
  • 如果用户从下拉列表中select – 生成一个回发,在我的代码隐藏中触发一个C#事件。 这个事件可能会发送到数据库,但无论如何,全新生成的HTML页面最终都会被发送回客户端。
  • 我可以使用Page.Session来存储我需要稍后重用的键值对

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

我会尝试评论你提到的每一个要点:

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

您的内容页面将成为MVC世界的观点。 他们仍然提供相同的内容区域到您的母版页。

webforms的事件处理不应该在MVC中使用,而是你的Controller类和它们的action方法将把你的数据加载到一个传递给视图的“模型”中。

虽然在MVC中可以使用webform风格的数据绑定,但我发现这不是最佳的解决scheme。 最好把你的数据放在模型类中,并强制input你的视图,以便你可以直接访问这个模型。 然后,简单地使用<%= ViewData.Model.SomeProperty %>语法访问您的数据并将其显示在所需的位置。 至于视图状态,我的build议是忘记它甚至存在。

请记住,使用MVC的好处之一是您可以控制发送给客户端的HTML。 拥抱这种力量,并试图find解决scheme,让你保持这种控制。 Webform控件试图隐藏您的html,因此在您需要时更难以自定义html。

我会强烈推荐JQuery或其他类似的强大的JavaScript库之一。 但要学会直接使用它们来访问HTML DOM,并避免webform控件的id损坏问题。

您可以使用jquery钩入客户端的下拉select,并提交标准或ajax样式的请求。 这些请求可以返回新页面,redirect,html片段,甚至可以用来更新现有页面的JSON数据。

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