如果让你选择,你会走哪条路?
ASP.NET 网络表单 + ASP.NET AJAX
或者
您选择的 ASP.NET MVC + JavaScript 框架
ASP.NET Webforms / ASP.NET AJAX 对 MVC 有什么限制吗?
如果让你选择,你会走哪条路?
ASP.NET 网络表单 + ASP.NET AJAX
或者
您选择的 ASP.NET MVC + JavaScript 框架
ASP.NET Webforms / ASP.NET AJAX 对 MVC 有什么限制吗?
我最近都做了,我十有八九会采用 MVC。
我选择使用 asp.net 表单开发的一次是使用 gridview 控件。我们正在将 jquery 用于我们的带有 MVC 的 javascript 框架,并且还没有找到一个非常好的类似 gridview 的控件。我们有一些功能性的东西,但是与使用 asp.net 服务器端控件相比,我们花在学习、调整和调试它上的时间相当长。在非 asp.net 表单开发中,微软提供的所有开箱即用的漂亮小部件都会丢失。当你第一次开始时,这些小部件的丢失是自由的,同时也是可怕的。
归根结底,我很高兴我们正在做 MVC 开发。我和我的团队学习了一个新框架(我们之前只是 asp.net 开发人员),并且已经开始使用 html 和 javascript。如果需要,我们可以将这些技能用于其他项目或其他语言。
不要让人们愚弄你认为这是一个明确的选择。你可以两全其美。我的方法是创建一个 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 访问您的页面变量。
那么你得到了什么?:
你会失去什么?
哦,对于 AJAX - 绝对是 jQuery。向返回 JsonResult 的控制器方法发出请求确实简化了事情。
我喜欢网络表单,但 ASP.NET AJAX 是一堆废话。
我更喜欢使用 WebForms + 自定义 HTTPHandlers 来处理任何 AJAX 调用的服务器端。
呵呵,被否决了……
ASP.NET AJAX 是一堆废话,因为回调需要重新实例化整个页面类,您不是调用单个方法,而是每次都在服务器上重建整个页面。
此外,UpdatePanels 返回整个页面,只弹出更新面板中的部分,完全浪费带宽。
我理解它为什么这样做,因为 WebForms 控件不能真正轻松地以其他方式实现,但它仍然非常糟糕。
我看到大多数响应是在 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 开发工具的进步和进步受到开发者社区需求的推动,而不是利润。
当我设计一个网站时,我更喜欢的一件大事是 DRY 原则。IMO ASP.NET MVC 比 Web 表单干得多。
我最近从 webforms 迁移到 MVC,我希望我永远不必回去!
ASP.NET MVC 仍处于“预览”形式,因此在它成熟之前我不会考虑它。你可以很容易地滚动你自己的 MVP 模式,而不需要太多的管道。
在 Ajax 方面,我会说尝试找到可以满足您需求的库(商业或其他)。基础知识(网格、树、自动完成文本框等)已经完成了。不要重新发明轮子。
如果您需要更新面板,我建议您使用开源和 lite MagicAjax 或 ComfortASP。如果您需要框架帮助开发自定义 ajax,我建议使用 jQuery。
带有 ASP.NET Ajax 的 Web 表单是天堂。两者之间的融合令人惊叹,使用起来非常自然。
使用 webforms 代替 mvc 将使您能够利用生命周期来开发非常好的和可重用的控件。
但是我仍然喜欢在混合中添加一点 jQuery 来遍历 dom 和添加动画,我只是喜欢使用 asp.net ajax 来获得与服务器端的集成。
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 应用程序。
为了恭维@ben 的回答,我使用 ASP.Net webforms 进行简单的数据绑定,并使用 JQuery 进行所有 Ajax 事务。老实说,我还是放不下数据绑定,因为它很简单。Viewstate 几乎没用,所以我基本上把它关掉了。虽然您可以使用 MVC,但请注意,您将花费大部分时间来开发您认为在 Forms 中理所当然的功能。祝你好运!
我的经验是用 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 或类似的东西。
那是我的两分钱...
我已经将 asp.net winforms 与 ajax.net 以及原型/ext/jquery 一起使用。我想需要考虑的是网站的目标。MVC 是一种流行的模式。我不能反对 ASP MVC,因为我没有机会使用它,但我想确保您知道,如果您选择 webforms,您不仅限于 ajax.net。
我同意 asp.net ajax UpdatePanels 不是一个理想的解决方案。
我们避免使用它们,而是使用客户端库与服务器进行任何通信。我确实喜欢我在 PDC 上看到的关于带有声明性组件和客户端模板的 asp.net ajax 4.0 中的功能 - 非常好!将 JQuery 与现有库结合起来提供了相当多的功能——我曾质疑仅使用 JQuery,因为它占用的空间要小得多,而且它能够做很多与 asp.net ajax 客户端库相同的事情。
至于服务器堆栈 - 我还没有使用 MVC,但我们已经成功地使用了使用 webforms 的家庭滚动 MVP 方法。
距离最初的问题已经很久了。现在我们有了 MVC3 和 .NET 4
MVC 现在是比以前更好的解决方案吗?