21

如果让你选择,你会走哪条路?

ASP.NET 网络表单 + ASP.NET AJAX

或者

您选择的 ASP.NET MVC + JavaScript 框架

ASP.NET Webforms / ASP.NET AJAX 对 MVC 有什么限制吗?

4

14 回答 14

29

我最近都做了,我十有八九会采用 MVC。

  • 我真的不喜欢asp.net ajax 控件的实现,我遇到了很多时间、事件和调试回发问题。我从http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/学到了很多东西
  • 我们使用 MVP 模式http://www.codeplex.com/aspnetmvp的 asp.net 项目,该模式运行良好。然而,我们最终在视图中有很多代码,因为我们直接与服务器端控件交互(即很多 gridview 操作)。此代码几乎无法使用单元测试框架进行测试。我们应该更加努力地将代码保持在视图之外,但在某些情况下,它更容易且不那么混乱。

我选择使用 asp.net 表单开发的一次是使用 gridview 控件。我们正在将 jquery 用于我们的带有 MVC 的 javascript 框架,并且还没有找到一个非常好的类似 gridview 的控件。我们有一些功能性的东西,但是与使用 asp.net 服务器端控件相比,我们花在学习、调整和调试它上的时间相当长。在非 asp.net 表单开发中,微软提供的所有开箱即用的漂亮小部件都会丢失。当你第一次开始时,这些小部件的丢失是自由的,同时也是可怕的。

归根结底,我很高兴我们正在做 MVC 开发。我和我的团队学习了一个新框架(我们之前只是 asp.net 开发人员),并且已经开始使用 html 和 javascript。如果需要,我们可以将这些技能用于其他项目或其他语言。

于 2008-09-19T03:20:36.003 回答
11

不要让人们愚弄你认为这是一个明确的选择。你可以两全其美。我的方法是创建一个 MVC 项目,但不是添加视图,而是添加标准的 asp.net 页面,而是将后面的代码更改为从 MVC.ViewPage 继承,如下所示:

public partial class SamplePage : System.Web.Mvc.ViewPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

如果您将自己限制在前面代码中的单个表单标记(带有 runat="server"),那么您就拥有访问标准 asp.net 服务器控件的完整代码。这意味着您可以获得对演示文稿的完全服务器端控制(例如,使用数据绑定和转发器),而无需进行旧的 ASP 样式代码编织。

    protected void Page_Load(object sender, EventArgs e)
    {
        IObjectDefinition instance = (IObjectDefinition)ViewData["definition"];
        _objectName.Text = instance.DisplayName;//textbox or label

        DataTable itemVals = new DataTable();
        itemVals .Columns.Add("itemName");
        itemVals .Columns.Add("itemValue");            


        IDictionary<string, string> items = (IDictionary<string, string>)ViewData["items"];
        foreach (KeyValuePair<string, string> datum in items)
        {
            conditions.Rows.Add(new object[] { datum.Key, datum.Value});
        }

        _itemList.DataSource = itemVals;//repeater
        _itemList.DataBind();
    }

任何控件的帖子都不会回发到页面,而是发回控制器。如果您记得在服务器控件上使用 name 属性,那么它们最终会出现在 FormControls 集合中,以便按照标准 MVC 访问您的页面变量。

那么你得到了什么?:

  • 完整的服务器端控制演示您前面的代码是纯 HTML 和 asp.net 服务器控制标签
  • 完全分离关注点 - 页面只进行演示,所有编排和编组都在控制器中完成(而不是页面中的 asp.net 样式)
  • 完整的 MVC 可测试性
  • 没有html代码编织
  • 您可以关闭视图状态并减少页面膨胀

你会失去什么?

  • 如果您只想使用服务器控件,那么您再次被限制为每页一个表单
  • 您可能需要手动指定按钮和表单的回发目标
  • 您再次有 2 个文件供您的演示文稿使用

哦,对于 AJAX - 绝对是 jQuery。向返回 JsonResult 的控制器方法发出请求确实简化了事情。

于 2009-10-30T18:41:53.217 回答
9

我喜欢网络表单,但 ASP.NET AJAX 是一堆废话。

我更喜欢使用 WebForms + 自定义 HTTPHandlers 来处理任何 AJAX 调用的服务器端。

呵呵,被否决了……

ASP.NET AJAX 是一堆废话,因为回调需要重新实例化整个页面类,您不是调用单个方法,而是每次都在服务器上重建整个页面。

此外,UpdatePanels 返回整个页面,只弹出更新面板中的部分,完全浪费带宽。

我理解它为什么这样做,因为 WebForms 控件不能真正轻松地以其他方式实现,但它仍然非常糟糕。

于 2008-09-19T02:49:02.477 回答
8

我看到大多数响应是在 MVC 1.0 之前出现的。由于我们现在处于 2.0 预览版,我认为重新访问可能会很好。

在我去年 3 月转向 MVC 之前,我做了大约 5 年的 ASP.NET 开发人员。我一秒钟都没有后悔。现在我意识到,我在 ASP.NET WebForms 中的能力越强,学习其他技术(例如 JavaScript 和非 Microsoft 的 AJAX 实现)就越困难。Microsoft 从他们的 WinForms 开发方法中利用了他们的 ASP.NET 开发方法,如果您来自 WebForms 开发,这有助于学习曲线,但如果您了解两种方法之间的差异,这不是开发 Web 应用程序的好方法。

我正在工作的最新项目要求我学习 ASP.NET MVC、JavaScript、jQuery、CSS 2 和 AJAX(非 Microsoft)。仅仅 9 个月后,我感觉比我在 ASP.NET 开发 5 年后为处理 Web 开发项目做好了准备。ASP.NET 实现使事情变得更加难以长期维护。MVC 使事情变得如此简单,因为您较少依赖快捷方式。学习框架需要一段时间,但是你对框架了解得越多,对框架的依赖就越少,你就越开始学习和理解既定的标准,比如 JavaScript 和 AJAX。

对我来说,这一个明确的选择。我永远不会回到 ASP.NET。如果我不会使用 ASP.NET MVC,我会学习 Ruby 或 PHP。我希望我的 Web 开发工具的进步和进步受到开发者社区需求的推动,而不是利润。

于 2010-02-01T10:13:34.777 回答
2

当我设计一个网站时,我更喜欢的一件大事是 DRY 原则。IMO ASP.NET MVC 比 Web 表单干得多。

我最近从 webforms 迁移到 MVC,我希望我永远不必回去!

于 2008-09-19T03:21:54.957 回答
2

ASP.NET MVC 仍处于“预览”形式,因此在它成熟之前我不会考虑它。你可以很容易地滚动你自己的 MVP 模式,而不需要太多的管道。

在 Ajax 方面,我会说尝试找到可以满足您需求的库(商业或其他)。基础知识(网格、树、自动完成文本框等)已经完成了。不要重新发明轮子。

于 2008-09-19T03:07:27.270 回答
2

如果您需要更新面板,我建议您使用开源和 lite MagicAjax 或 ComfortASP。如果您需要框架帮助开发自定义 ajax,我建议使用 jQuery。

于 2009-02-06T16:03:56.060 回答
1

带有 ASP.NET Ajax 的 Web 表单是天堂。两者之间的融合令人惊叹,使用起来非常自然。

使用 webforms 代替 mvc 将使您能够利用生命周期来开发非常好的和可重用的控件。

但是我仍然喜欢在混合中添加一点 jQuery 来遍历 dom 和添加动画,我只是喜欢使用 asp.net ajax 来获得与服务器端的集成。

于 2008-09-19T04:19:16.753 回答
1

MVC 背后的概念很棒,但要准备好放弃您多年来使用的所有服务器控件的几乎所有功能。我只看了大约一周的 MVC 实现,但是页面生命周期和视图状态已经消失,所以这些控件不再正常工作。

我还惊讶地发现许多示例在标记中包含大量逻辑代码。没错,aspx 文件中的“if”和“foreach”语句——恕我直言,这是一个可怕的倒退。我很高兴将经典的 asp 抛在脑后,但在当前的 asp.net mvc 模式实现中,您又回到了标记中的代码,需要在任何地方使用帮助程序,并且几乎没有任何可用的服务器控件。

如果您现在开始一个新项目,我建议您坚持使用 asp.net webforms,并根据需要使用内置的 asp.net ajax、工具包和 jQuery。asp.net ajax 实现可能不是绝对最好或最有效的实现,但除非您在第一天获得一百万个唯一性或您的服务器是 commodore vic 20,否则性能影响不会那么明显。

这当然取决于您的项目规模。如果您正在启动一个 5 年的企业级应用程序,预计会有数百万的页面浏览量,UpdatePanel 可能不会削减它,但如果您正在构建一个普通站点,抛出一个原型,或者只是需要快速移动,asp.net ajax 工作得非常好,并且学习曲线极低。

需要明确的是,每次进行 ajax 调用时,绝对不会返回整个页面。/Only/ 需要更新的面板内容通过网络发送。任何 http 监视器都会证明这一点。是的,页面 /lifecycle/ 已执行,但知道您可以构建相当高效的 asp.net ajax 应用程序。

于 2008-12-10T16:02:11.213 回答
1

为了恭维@ben 的回答,我使用 ASP.Net webforms 进行简单的数据绑定,并使用 JQuery 进行所有 Ajax 事务。老实说,我还是放不下数据绑定,因为它很简单。Viewstate 几乎没用,所以我基本上把它关掉了。虽然您可以使用 MVC,但请注意,您将花费大部分时间来开发您认为在 Forms 中理所当然的功能。祝你好运!

于 2010-09-20T05:57:27.943 回答
1

我的经验是用 php 和 ruby​​ 为 apache 服务器编写 web 应用程序。当我找到一份维护用 asp.net (webforms) 编写的网络应用程序的工作时,我开始学习微软构建网络应用程序的方式。我不得不说我完全被羞辱了!我在想 WTF 是不是所有这些视图状态垃圾都被送回了?这甚至有必要吗?

然后我决定用 ajax 和 jquery 做一些简单的事情,这导致我更新面板和正在生成的 clientID,而不是我在视图中设置的内容。真是浪费我的时间!为什么我不能在一个页面上有多个表单?为什么我不能只使用常规的 ajax 调用?为什么我的视图有服务器逻辑?这些都是我确信许多 web 程序员面对 asp.net webforms 的所有问题。然后,我发现了 .NET MVC。我的生活变得轻松多了。

我习惯于使用诸如 Rails 和 CakePHP 之类的 MVC 框架来创建 Web 应用程序,它们的编程方式。技术实际上是为网络设计的。

我的建议是,将 WebForms 留给习惯于编写 winforms 类型应用程序的人,因为它试图抽象出您正在 Web 上编程的事实。如果您想真正自由地开发对 Web 程序员真正有意义的 Web 应用程序,请使用不会妨碍您的 .NET MVC 或类似的东西。

那是我的两分钱...

于 2010-03-09T01:11:27.247 回答
0

我已经将 asp.net winforms 与 ajax.net 以及原型/ext/jquery 一起使用。我想需要考虑的是网站的目标。MVC 是一种流行的模式。我不能反对 ASP MVC,因为我没有机会使用它,但我想确保您知道,如果您选择 webforms,您不仅限于 ajax.net。

于 2008-09-19T02:50:33.503 回答
0

我同意 asp.net ajax UpdatePanels 不是一个理想的解决方案。

我们避免使用它们,而是使用客户端库与服务器进行任何通信。我确实喜欢我在 PDC 上看到的关于带有声明性组件和客户端模板的 asp.net ajax 4.0 中的功能 - 非常好!将 JQuery 与现有库结合起来提供了相当多的功能——我曾质疑仅使用 JQuery,因为它占用的空间要小得多,而且它能够做很多与 asp.net ajax 客户端库相同的事情。

至于服务器堆栈 - 我还没有使用 MVC,但我们已经成功地使用了使用 webforms 的家庭滚动 MVP 方法。

于 2008-12-05T02:17:05.673 回答
0

距离最初的问题已经很久了。现在我们有了 MVC3 和 .NET 4

MVC 现在是比以前更好的解决方案吗?

于 2010-09-26T16:12:26.040 回答