日期:2014-05-17  浏览次数:20440 次

问个技术问题 高手进 求犀利解释
ASP.NET 在页面类 里面可以定义一个protected全局变量,然后在html页面可以通过 《%= 变量名 %》 来赋值,也可以直接在后台 获取控件给其赋值 这2者 有什么区别,哪种效率更高。
例:  
第一种:
后台: protected s=“1111”;
前台: <input id="1" value="<%= s %>"></input>
第2种
后台 sb.Text="1111";
前台 <asp:TextBox id="sb" runat="server"></asp:TextBox>

------解决方案--------------------
第一种:
后台: protected s=“1111”;
前台: <input id="1" value="<%= s %>"></input>

这种方式的话,实际上aspx和后台代码编译之后都是一个分部的类,<input id="1" value="<%= s %>"></input>这种方式的话,原理是这样的,如果你使用这种方式来生成一个input,那么asp.net引擎在编译的时候,会把你的这段代码编译成3个控件,2个literalControl,1个脚本代码段控件,当页面进行Render的时候,会依次遍历这3个控件,然后执行每个控件的Render方法,在第一个literalControl进行Render的时候,会输出<input id="1" value=",然后执行第二个表达式,输出你的s,最后执行第二个literalControl的Render方法输出"></input>,所以你在最后的输出流能看到<input id="1" value="1111"></input>

第2种
后台 sb.Text="1111";
前台 <asp:TextBox id="sb" runat="server"></asp:TextBox>


第二种方式的话,是使用asp.net服务端控件,在编译的时候,asp:TextBox被编译成了你这个页面的私有变量,然后进行了一系列的属性赋值,比如说id="",text="1111",同理在进行Render的时候,会执行控件重新的Render方法,Render方法之前会执行RenderAttrbutes,同样是往输出流里写入html代码。


在我觉得这2种方式区别并不大,但是根据你的需求来看,因为asp.net服务端控件归根接地也就是往响应流输出东西,不过差别最大的我认为是asp.net服务端控件可以保持状态,是利用了viewstate的缘故,虽然你自己手写代码页可以实现,不过微软封装到了服务端控件里。所以楼上说的不对,就算是脚本代码段,也会执行生命周期。反而比asp.net控件多了2个更轻量的控件而已。。。。真心区别不大
------解决方案--------------------
和性能关系不大,看你需要了。

很多学院派非常强调“性能”,因为他们的教学内容围绕着上世纪60年代早期那种又慢又小的计算机,所以性能经常被讨论。

而现在计算机的性能足够强大,计算机单位性能的价格下降了数以万倍,可是程序员的工资和几十年前相比没有那么大的变化,所以有工作经验的人设计程序并不那么把性能放在突出的位置讨论。

等你毕业就明白了。