如果给出选择,你会选择哪条路径?
ASP.NET Webforms + ASP.NET AJAX
要么
您选择的ASP.NET MVC + JavaScript框架
ASP.NET Webforms/ASP.NET AJAX是否存在与MVC相比的限制?
我最近都做过,我会在十分之九的时间内接受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.如果我们需要,这些是我们可以用于其他项目或其他语言的技能.
不要让人们欺骗你认为这是一个明确的选择.你可以充分利用这两个世界.我的方法是创建一个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"); IDictionaryitems = (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的控制器方法发出请求确实简化了事情.
我喜欢webforms,但ASP.NET AJAX是一堆垃圾.
我更喜欢使用WebForms +自定义HTTPHandler来处理任何AJAX调用的服务器端.
嘿,downvoted ......
ASP.NET AJAX是一堆垃圾,因为回调需要重新实例化整个页面类,而不是调用单个方法,而是每次都在服务器上重建整个页面.
此外,UpdatePanels返回整个页面,只会弹出更新面板中的部分,这样就完全浪费了带宽.
我理解为什么它这样做,因为WebForms控件实际上不是很容易的其他方式,但它仍然是非常糟糕的.
我看到大多数响应都是在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开发工具的进步和进步能够受到开发人员社区需求的激励,而不是利润.