服务器刚开,凑个沙发!.NET几点你应该知道的细节!
天下最远的距离不是美国到中国!而是电信到网通!
天下最难掌握的不是某某语言的使用!而是细节!
一:.NET代码处理机制!
ASP.NET不同于ASP页面的处理机制!
ASP中 <%XXX%> 中的代码是运行时和其他页面语言代码一起编译
而.NET 则是在页面加载的时候 ,首先处理<%%>中的代码,或者说是处理.NET本身的代码
然后全部处理完毕后一次性发送给前台页面,然后开始编译JAVASCRIPT和HTML;
如下:
前台页代码
<html>
<head>
<title>.NET处理流程</title>
<script language=javascript>
function demo()
{
for(var i=0;i<=20;i++)
{
var get_id=<%=get_id('i')%> ; //取得C#返回的值
Document.getElementById(get_id);
}
}
</script>
</head>
<body>
</body>
</html>
后台.CS代码中的方法
public string get_id(String id)
{
String get_id=id;
Result_id=xxxxxxxxxxxxxxxxxx//处理方法略
return Result;
}
看了这段代码,理论上是"正确"的,但是 实际运行的时候你会发现上面的代码是错误的,因为i的值总是'105'
这是为什么那!
上面说过了因为.NET要先处理<% %>中的代码 然后处理了.NET代码后才一次性发给JS处理
所以在发给JS前<%=get_id('i')%>中的i是ASCII的码结果!也就是 105 所以取出来的始终是传入105的结果
也就是说,在页面加载的时候CLR就把 <%=get_id('i')%>拿过去处理,他才不会先处理JS来改变i的值
等把<%=get_id('105')%>处理完成后一次性发给JS去处理,结果代码变成了
<script language=javascript>
function demo()
{
for(var i=0;i<=20;i++)
{
var get_id=<%=get_id('105')%> ; //取得C#返回的值
Document.getElementById(get_id);
}
}
</script>
结果并不是你想要的!
二:什么时候使用StringBullder 与使用StringBullder的小细节
System.String 被赋值的时候 是动态创建 一个String 类型的副本 每给他赋值一次他就动态创建一,并不是
他把本身改变成了你的赋值,而是动态新创建一个内存空间,创建一个String副本,这个就很影响效率了,尤其是大量处理字符串和不同格式转化字符串的时候.
而StringBullder 是直接给原来的StringBullder 实体赋值,这个就比String动态创建效率要好很多!
这个就是他们的区别!嘿嘿!
但是StringBullder还有个小细节.
我同学最近在做一个小项目 StringBullder用了很多次 但是我发现他的代码在StringBullder的写法上不是很好
.
StringBullder SB=new StringBullder();
SB.Append('<script>');
SB.Append('alert('可爱的傻瓜)');
SB.Append('</script>');
这么做 其实并没有完全的利用好他的优点,因为script与<号和>号并不属于 同类型
而在做上面的操作的时候 在拼装的时候 当.SB.Append(<script>);的时候 会进行格式转换 Object装箱操作
影响效率 我们应该把字符串和其他字符分别开,写成下面的形式
StringBullder SB=new StringBullder();
SB.Append('<');
SB.Append('script');
SB.Append('>');
SB.Append('alert');
SB.Append('(');
SB.Append('可爱的傻瓜');
SB.Append(')');
SB.Append('</');
SB.Append('script');
SB.Append('>');
别怕麻烦啊呵呵!
三:
.<%=...%>与<%#... %>的区别:
<%=...%>是在程序执行时调用,<%#... %>是在DataBind()方法之后被调用
四:ASP.NET2.0 只使用客户端代码就可以开启对话框而不用 加Attrbute
新多了个onclientclick,这样写
<asp:button id="btnClick" runat="server" OnClientClick="return confirm('Are you sure?');" text="Button"></asp:button>
五: @ 的使用
@在变量前常常是指的取地址,C#中的@用在string变量前面,指的是忽略字符串中所有的转义符“\”。如:
Console.Writeln( "C:\\downloads\\test.rar" );
与下面的语句相当:
Console.Writeln( @"C:\downloads\test.rar" );
实习生 都加油哈哈!