当前位置:  开发笔记 > 后端 > 正文

ASP.NET webforms + ASP.NET Ajax与ASP.NET MVC和Ajax框架的自由

如何解决《ASP.NETwebforms+ASP.NETAjax与ASP.NETMVC和Ajax框架的自由》经验,为你挑选了4个好方法。

如果给出选择,你会选择哪条路径?

ASP.NET Webforms + ASP.NET AJAX

要么

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

ASP.NET Webforms/ASP.NET AJAX是否存在与MVC相比的限制?



1> ben..:

我最近都做过,我会在十分之九的时间内接受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.如果我们需要,这些是我们可以用于其他项目或其他语言的技能.


您是否考虑过使用jQuery和DataTables.Net的客户端网格?很多时候,服务器端网格控制可能会被过度杀死.

2> Mike..:

不要让人们欺骗你认为这是一个明确的选择.你可以充分利用这两个世界.我的方法是创建一个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 items = (IDictionary)ViewData["items"];
        foreach (KeyValuePair 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的控制器方法发出请求确实简化了事情.



3> FlySwat..:

我喜欢webforms,但ASP.NET AJAX是一堆垃圾.

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

嘿,downvoted ......

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

此外,UpdatePanels返回整个页面,只会弹出更新面板中的部分,这样就完全浪费了带宽.

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


你能详细说明"堆垃圾"吗?

4> Neil T...:

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

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

我正在工作的最新项目要求我学习ASP.NET MVC,JavaScript,jQuery,CSS 2和AJAX(非Microsoft).仅仅九个月之后,我觉得接受Web开发项目的准备比我在ASP.NET开发五年后做的更好.ASP.NET实现使得长期维护变得更加困难.MVC让事情变得如此简单,因为你对快捷方式的依赖程度较低.学习框架需要一段时间,但是您对框架的了解越多,您对框架的依赖程度就越低,您开始学习和理解已建立的标准(如JavaScript和AJAX)的次数就越多.

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


我必须说我跟着几乎完全相同的路径,我再也不会再回到ASP.NET WebForms了.到目前为止,在过去的几个月里,我学到了(仍然是)JS,jQuery(马马虎虎),更多关于HTML和HTTP标准(我认为我很清楚,但我对内部几乎一无所知)并且它更容易做部分渲染,AJAX发布/获取,纯HTML控制,只做一切.MS用WebForms隐藏了我们所有的东西 - 这是很好的技术而且我很喜欢它但是从现在开始我只会维护它但是在MVC中开发新东西.
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有