2008-09-19 129 views

回答

9

我喜欢webforms,但ASP.NET AJAX是一堆废话。

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

嘿,downvoted ...

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

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

我明白为什么它会这样做,因为WebForms控件不能很容易地以其他方式实现,但它仍然非常糟糕。

+0

现在我很好奇。 WebForms + ASHX的示例实现会是什么样的? – Bullines 2008-09-19 02:51:56

+0

您不仅限于使用处理程序实现的ASHX,还可以在类文件中对处理程序进行分组,并将处理程序添加到您的webconfig中。非常高效,但它取决于你想完成什么。举个例子,在有限的开销下进行一个调用来锁定数据库中的记录。 – 2008-09-19 02:54:21

+2

你能详细谈谈“一堆废话”吗? – 2008-09-19 03:22:10

0

我用ajax.net以及prototype/ext/jquery使用了asp.net winforms。我想要考虑的是该网站的目标.. MVC是一种流行模式。我无法对ASP MVC发表任何评论,因为我没有机会使用它,但是我想确保你知道,如果你选择了webforms,你并不局限于ajax.net。

+0

我想澄清一下。我期待着做一个MVC项目,但还没有一个启动的项目。不想听起来像我是令人沮丧的MVC发展。 – 2008-09-19 02:51:50

2

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

在Ajax方面,我会说试图找到你所要找的库(商业或其他)。基础知识(网格,树,自动完成文本框等)已经完成。不要重新发明轮子。

+0

ASP.NET MVC可能在RC中,但有趣的是Stackoverflow完全基于ASP.NET MVC构建。 – Notorious2tall 2009-02-06 16:10:33

+0

当然,这并不意味着我会相信它是用来支付账单的系统。 StackOverflow.com开始时只是一种玩物。 – 2009-02-09 15:31:36

29

我最近做了两次,我会在十次中选择九次MVC。

  • 我真的不喜欢asp.net ajax控件的实现,我遇到了很多关于时间,事件和调试回发问题的问题。我从http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/得知了很多
  • 这个asp.net项目我们用MVP模式http://www.codeplex.com/aspnetmvp,而且模式工作得很好。然而,我们在视图中结束了很多代码,因为我们直接与服务器端控件进行交互(即很多gridview操作)。这个代码几乎无法用单元测试框架测试。我们应该更加努力地将代码保留在视图之外,但是在某些情况下,它更容易,更不麻烦。

有一次,我会选择使用asp.net表单开发将使用gridview控件。我们使用jQuery的MVC和我们的JavaScript框架,还没有找到一个很好的gridview像控制。我们有一些功能强大的功能,但是使用asp.net服务器端控件进行学习,调整和调试的时间相当长。一个失去了微软提供的非asp.net表单开发的所有好的小部件。这些小部件的损失是免费的,而且在你第一次启动的同时也很可怕。

在一天结束时,我很高兴我们正在做MVC开发。我和我的团队学到了一个新的框架(我们之前只是asp.net开发者),并且已经用html和javascript弄脏了我们的手。如果我们需要的话,这些技能可以用于其他项目或其他语言。

+0

我同意你的观点,完全是这样的...好点:) – Marko 2009-08-26 21:59:58

2

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

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

1

带有ASP.NET Ajax的Webforms是天堂。 2之间的整合只是令人惊叹,感觉很自然。

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

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

0

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

我们避免使用它们,而是一直使用客户端库来与服务器进行任何通信。我喜欢我在PDC上看到的关于asp.net ajax 4.0中的特性,包含声明性组件和客户端模板 - 非常好!将JQuery与现有的库结合起来提供了相当多的内容 - 我唯一的问题是使用JQuery,而不是使用JQuery,因为它的占用空间更小,并且能够完成与asp.net ajax客户端库很多相同的功能。

就服务器堆栈而言 - 我还没有使用MVC,但我们已经成功地使用了使用webforms的自制MVP方法。

1

MVC背后的概念非常棒,但准备好几乎可以释放您使用了多年的所有服务器控件的所有功能。我只看了一个多星期的MVC实现,但页面生命周期和视图状态都消失了,所以这些控件不能正常工作。

我也惊呆了,发现一些包含很多逻辑代码的例子。这是正确的,aspx文件中的'if'和'foreach'语句 - 向后imho的可怕步骤。我非常高兴地离开了传统的asp,但是在当前的asp.net mvc模式实现中,您可以回到代码中,需要在任何地方使用助手,并且几乎没有任何可用的服务器控件。

如果您现在开始一个新项目,我建议坚持使用asp.net webforms,并根据需要使用内置的asp.net ajax,工具包和jQuery。 asp.net ajax实现可能不是绝对最好的或者最有效的实现,但是除非你在第一天获得了一百万个唯一身份验证,或者你的服务器是一个商业维客20,那么性能并没有那么明显。

这当然取决于您的项目大小。如果你开始一个5年的企业级应用程序,预计有数百万的页面浏览量,UpdatePanel可能不会削减它,但如果你正在建立一个普通的网站,抛出一个原型,或者只是需要快速移动,asp.net阿贾克斯工作得很好,学习曲线极低。

而且很明显,每次进行ajax调用时都不会返回整个页面。 /只有/需要更新的面板的内容通过电线发送。任何http监控器都会证明这一点。是的,页面/生命周期/执行,但知道你可以建立相当高效的asp.net ajax应用程序。

2

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

9

不要让人们愚弄你,认为这是一个明确的选择。你可以得到两全其美的好处。我的做法是落后创建一个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的控制器方法发出请求确实简化了一些事情。

8

我看到大部分响应都是在MVC 1.0之前发布的。由于我们现在处于2.0预览版,所以我认为可以重新访问。

我是一个ASP。在我去年3月份转向MVC之前,大约五年时间,.NET开发人员已经完成了这个任务我没有后悔一秒钟。我现在意识到,我在ASP.NET WebForms中获得的越强,学习其他技术(如JavaScript和AJAX的非Microsoft实现)就越困难。微软利用他们的WinForms开发方法提供的ASP.NET开发方法,如果您是从WebForms开发而来的,这对开发学习曲线有帮助,但如果您了解这两种方法之间的差异,则不是开发Web应用程序的好方法。

我的工作要求我学习ASP.NET MVC,JavaScript的,jQuery的,CSS 2和AJAX(非Microsoft)最新的项目。仅仅9个月后,我觉得比经过5年的ASP.NET开发后,我的网站开发项目的准备工作要好得多。 ASP.NET实现使事情变得更加难以长期维护。 MVC让事情变得更容易,因为你不太依赖快捷方式。学习框架需要一段时间,但您对框架了解得越多,对框架的依赖就越少,并且越多您开始学习和理解已建立的标准,如JavaScript和AJAX。

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

1

我的经验是用php和ruby编写apache服务器的web应用程序。当我找到维护用asp.net(webforms)编写的web应用程序的工作时,我深入了解构建web应用程序的微软方法。我将不得不说我已经完全屈服了!我在想,WTF是所有这些视图状态的垃圾被送回来的?这甚至是必要的吗?

然后,我决定看看做与AJAX和jQuery一些简单的事情,这导致我更新所产生的面板和的ClientID,而不是我的视图设置。多么浪费我的时间!为什么我不能在一个页面上有多个表单?为什么我不能使用常规的ajax调用?为什么我的观点有服务器逻辑?这些都是很多web程序员面临asp.net webforms的问题。然后,我发现了.NET MVC。我的生活变得更容易了。

我习惯了使用MVC框架,如Rails和CakePHP创建了一个网络应用程序,他们要被编程的方式。技术实际上是为了网络。

我的建议是这样,离开的WebForms为用于编程的WinForms型应用程序,因为它试图抽象的事实,你在网络上编程的人。如果你想有真正的自由去开发网络应用程序,这对网络程序员来说真的很有意义,那么使用.NET MVC或者类似的东西,这些都不会妨碍你。

那是我的两分钱......

1

恭维@本的答案,我用ASP.Net Web表单进行简单的数据绑定,和JQuery为所有的Ajax事务。说实话,由于其简单性,我仍然无法放弃数据绑定。 Viewstate几乎没用,所以我基本关闭它。尽管您可以使用MVC,但需要注意的是,您需要花大部分时间来开发您在Forms中认为理所当然的功能。祝你好运!

0

自原来的问题已经很长时间了。现在我们有MVC3和.NET 4

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