关于.net:ASP.NET Web窗体ASP.NET Ajax与ASP.NET MVC和Ajax框架的自由

关于.net:ASP.NET Web窗体ASP.NET Ajax与ASP.NET MVC和Ajax框架的自由

ASP.NET webforms + ASP.NET Ajax versus ASP.NET MVC and Ajax framework freedom

如果可以选择的话,您会选择哪个路径?

ASP.NET Webforms + ASP.NET AJAX

ASP.NET MVC + JavaScript Framework of your Choice

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


最近我都做过,我会在十次中拿出九次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控件。我们在MVC的JavaScript框架中使用jquery,但尚未找到控件之类的很好的gridview。我们有一些功能,但是相对于使用asp.net服务器端控件,我们投入了大量的时间进行学习,调整和调试。可以松开Microsoft提供的所有精美的小部件,它们可以进行非asp.net表单开发。这些小部件的丢失正在释放,并且在您首次启动的同时令人恐惧。

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


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

1
2
3
4
5
6
public partial class SamplePage : System.Web.Mvc.ViewPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    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的控制器方法发出请求确实简化了事情。


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

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

嘿,投票......

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

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

我理解为什么要这样做,因为WebForms控件实际上不是很容易以其他方式实现,但是它仍然很糟糕。


我看到大多数响应都在MVC 1.0之前发布。由于我们现在处于2.0预览版中,所以我认为重新访问可能会更好。

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

我正在工作的最新项目要求我学习ASP.NET MVC,JavaScript,jQuery,CSS 2和AJAX(非Microsoft)。仅九个月之后,我感觉比与ASP.NET开发五年后相比,为进行Web开发项目做的准备要好得多。 ASP.NET实现使事情很难长期维护。 MVC使事情变得如此简单,因为您对快捷方式的依赖性降低。学习该框架需要花费一些时间,但是您对框架的了解越多,对框架的依赖就越少,而您越开始学习和理解已建立的标准(例如JavaScript和AJAX)。

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


如果需要更新面板,建议您使用开源和精简版MagicAjax或ComfortASP。如果您需要框架有助于开发自定义Ajax,建议使用jQuery。


在设计站点时,我更喜欢的一大优点是DRY原则。 IMO ASP.NET MVC比Web表单干得多。

我最近已经从Webforms转向了MVC,我希望我再也不必回头了!


ASP.NET MVC仍为"预览"格式,因此,在成熟之前我不会考虑它。您可以轻松滚动自己的MVP模式,而无需花费太多精力。

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


为了补充@ben \\的答案,我使用ASP.Net Webforms进行简单的数据绑定,并使用JQuery进行所有Ajax事务。老实说,由于它的简单性,我仍然不能放弃数据绑定。 Viewstate几乎没有用,所以我基本上将其关闭。虽然您可以使用MVC,但是请注意,将花费大多数时间来开发在Forms中视为理所当然的功能。祝你好运!


我的经验是使用php和ruby为Apache服务器编程Web应用程序。当我从事维护用asp.net(webforms)编写的Web应用程序的工作时,便开始学习Microsoft构建Web应用程序的方法。我不得不说我完全受了伤!我当时在想WTF是否会将所有这些ViewState垃圾发送回来?这有必要吗?

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

我习惯于使用Rails和CakePHP之类的MVC框架以编程方式创建Web应用程序。实际用于网络的技术。

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

那是我的两分钱...


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

我也惊呆了,找到了许多在标记中包含很多逻辑代码的示例。是的,aspx文件中的'if'和\\'foreach \\'语句是正确的-倒退了恕我直言。我很高兴将经典的asp抛在后面,但是在asp.net mvc模式的当前实现中,您可以回到标记中的代码,需要在所有地方使用辅助程序以及几乎没有任何可用的服务器控件。铅>

如果您现在开始一个新项目,我建议您坚持使用asp.net网络表单,并根据需要使用内置的asp.net ajax,工具包和jQuery。 asp.net ajax实现可能不是绝对最佳或最有效的实现,但是除非您在第一天获得一百万个唯一身份,或者您的服务器是vic 20,否则性能不会受到影响引人注意。

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

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


使用ASP.NET Ajax的Webforms是天堂。这两个之间的集成令人惊叹,并且使用起来非常自然。

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

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


距原始问题已有很长时间了。现在我们有了MVC3和.NET 4

与以前相比,MVC现在是否是更好的解决方案?


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

我们避免使用它们,而是一直使用客户端库与服务器进行任何通信。我喜欢我在PDC上看到的有关具有声明性组件和客户端模板的asp.net ajax 4.0中的功能的信息-非常好!将JQuery与现有库结合在一起可以提供很多功能-我质疑使用JQuery作为替代,因为它占用的空间小得多,并且能够执行与asp.net ajax客户端库相同的事情。

就服务器堆栈而言-我还没有使用过MVC,但是我们成功使用了通过Webforms自行开发的MVP方法。


我已经将asp.net winforms与ajax.net以及prototype / ext / jquery一起使用了。我想要考虑的是网站的目标。MVC是一种流行的模式。我无法针对ASP MVC讲任何话,因为我还没有机会使用它,但是我想确保您知道,如果您选择了Webforms,则不仅限于ajax.net。


推荐阅读

    linux命令行显示路径?

    linux命令行显示路径?,系统,数据,信息,命令,工作,时间,标准,文件,目录,名称,l

    linux中路径修改命令?

    linux中路径修改命令?,系统,命令,首次,工作,名称,目录,文件,环境变量,路径,

    linux怎么看路径命令?

    linux怎么看路径命令?,数据,工作,系统,信息,时间,命令,文件,目录,路径,缩写,

    linux命令行路径补全?

    linux命令行路径补全?,系统,名称,软件,情况,命令,工具,智能,信息,不了,终端,l

    linux隐藏命令行路径?

    linux隐藏命令行路径?,系统,工作,信息,地址,名称,命令,标准,目录,文件夹,文

    linux路径命令符号?

    linux路径命令符号?,系统,标准,信息,数据,实时,状态,名字,环境,概念,代码,lin

    linux常用的命令路径?

    linux常用的命令路径?,地址,工作,基础,网络,管理,系统,信息,命令,企业,服务,l

    linux切换路径命令行?

    linux切换路径命令行?,系统,工作,名称,地址,目录,命令,工具,密码,一致,管理,

    linux改变命令的路径?

    linux改变命令的路径?,数字,第一,目录,工作,一致,名称,系统,命令,文件夹,代

    linux中显示路径命令?

    linux中显示路径命令?,系统,地址,工作,信息,时间,命令,数据,网络,路径,名字,l

    linux保存路径命令行?

    linux保存路径命令行?,状态,地址,电脑,档案,系统,底部,软件,密码,命令,文件,l

    linux相对路径命令?

    linux相对路径命令?,工作,名字,路径,目录,管理,信息,系统,位置,名称,基础,lin

    linux多路径查看命令?

    linux多路径查看命令?,设备,软件,网络,工具,系统,情况,下降,公司,名称,大幅,

    linux路径命令解释?

    linux路径命令解释?,系统,信息,设备,数据,工具,命令,文件,标准,发行,时间,lin

    linux相对路径和命令?

    linux相对路径和命令?,地址,工作,信息,数据,系统,命令,文件,目录,时间,路径,l

    linux显示路径命令?

    linux显示路径命令?,系统,信息,工作,数据,名称,位置,标准,环境,时间,命令,lin

    linux拷贝路径命令行?

    linux拷贝路径命令行?,系统,文件,命令,目录,名称,源文件,文件夹,目标,路径,

    linux路径截取命令?

    linux路径截取命令?,标准,图片,命令,环境,工具,信息,软件,系统,文件,目录,Lin

    linux挂载命令路径?

    linux挂载命令路径?,服务,信息,系统,电脑,情况,工具,网络,命令,磁盘,目录,Lin

    linux命令文件路径?

    linux命令文件路径?,地址,系统,工作,命令,位置,管理,信息,软件,工具,图片,lin