动态创建控件适用于不特定多个控件的情况,比如列表。但是因为ajax的盛行,现在都在客户端加载了,用控件就显得不合时宜了。

解决方案 »

  1.   

    动态创建控件,对性能原本没有任何影响。因为就算是你在设计窗口上“拖上去”的asp.net服务器控件,它在页面实例化后也是动态生成的。只不过它生成的控件可能基本上都是在页面Init之前创建的(因为那种代码不需要判断条件表达式),而你生成的控件可能基本上都是在Page_Load时创建的(因为你的代码需要判断url参数、cookie等等来动态决定生成什么东西)。我以前写过一个demo。http://bbs.csdn.net/topics/380169102但是动态加载控件,需要组件开发知识。如果你没有这方面知识,就可能写出错误的代码。这些错误的代码可能多做了几十倍的事情,例如回发时你仅仅需要重建控件的“空壳子”(随后asp.net就会为控件的成千上万的属性而自动填入ViewState中的值
    ),此时不需要为控件各种属性赋值,而如果你去从什么数据库之类的地方读取值并且用代码画蛇添足地给控件属赋值,那么显然这是巨大的浪费。——但是如果不了解asp.net组件开发知识,你可能看不出来这个问题。因为你画蛇添足地做了一大堆错误操作之后,asp.net又迅速把ViewState值覆盖上去了。结果你只是发现自己的asp.net程序比别人的慢几十倍而已,而看不出逻辑错误。
    但是更主要的问题是:整个asp.net机制都是有问题的。它基于“一遍遍地回发”的理念,而不是基于Ajax的理念。这才是问题。
      

  2.   

    使用asp.net做一点“原型”开发还是可以的。许多人惧怕javascript代码,因为它如果有几千行,很容易变得乱七八糟。因此我使用 Saltarelle,它可以自动地把c#代码编译为 javascript,适合开发大型 javascript 程序。这类系统中可用的前端 UI 框架有很多。在Saltarelle 中已经集成的包括 jQuery UI 系列的、Knockout的等。你还可以自己将任何 javascript 类库封装为 c# 类库。
      

  3.   

    比如说我以前用 Xamarin 编写手机软件。后来因为这个东西的小气地不断更新“加密”方法(从而造成开发环境经常出现问题),以及不靠谱的培训班太多(以至于有太多的根本没有学会开发的人自以为可以跟公司要高薪,从而造成开发人员很浮躁很难保证质量),我改用PhoneGap来开发手机端。这个时候Saltarelle就起到了关键性的作用!因为大量c#开发知识(包括linq、事件驱动、http网络通讯、多个工程的组织、偶尔进行反射,等等)都可以用到生成的 javascript 程序中,可以用在手机开发中。因此从asp.net角度,你的路可能越走越窄。就算是asp.net现在搞什么“开源”宣传,也很可笑。而如果想保证自己的.net开发知识都在Web编程上一直有效,你必须在进行web应用开发时在几乎没有用到asp.net的地方去使用.net。
      

  4.   


    Saltarelle的确不错。虽然我们在用TypeScript。后者更接近JS,方便现有代码的迁移,毕竟我们的前端更熟悉JS。不知道SP有何见解。谢谢。