`

小知识(三)

阅读更多

1.<a href="*.aspx" target="main"/>中为链接到的页面*.aspx指定了要显示的地方,这个main就是ASP时代经常用的框架frame的name属性,不过到了ASP.NET时代就不怎么支持了,个人感觉这个功能还是不错的,如下面的框架

           <frameset rows="60,81%" border="0" frameSpacing="0" frameBorder="0">

       <frame name="Top" src="topMenu.aspx" scrolling="no" noresize>

       <frameset cols="200,100%" id="frame">

           <frame name="Left" src="leftMenu.aspx">

   <frame name="main" src="welcome.aspx">

</frameset>

    </frameset>

点击链接(这个链接可以位于另一个frame里面)后*.aspx就会取代现在main框架里的welcome.aspx页面。

它有点类似于iframe标签:http://www.cnblogs.com/wennxxin/archive/2008/10/11/1308516.html

 <frameset cols="250px,*" id="fsmain"  name="fsmain">  左右两列左250px,右剩下的

     <frameset rows="0px,*">  上下两行上0px,下全部

       <frame id="tianchong" frameborder="no"></frame>  此frame是为了让下frame占整个高度

       <frame src="DjsbTree.aspx" id="ftree" name="ftree"  scroll="yes" frameborder="no" noresize="noresize"></frame>

    </frameset>

    <frameset rows="35px,*" id="fsright" name="fsright">

       <frame src="../djsbsxxtznew/DjsbSearch.aspx" id="fsearch" name="fsearch" scroll="yes" frameborder="no" noresize="noresize"></frame>

       <frame src="../djsbsxxtznew/DjsbTable.aspx" id="ftable" name="ftable" scroll="yes" frameborder="no"  noresize="noresize"></frame>

    </frameset>

  </frameset>

frame与iframe

http://wenku.baidu.com/view/86f97d6527d3240c8447ef88.html

frame的noresize属性 设置该属性noresize="noresize"的话就不能拖拽改变frame的大小

http://www.w3school.com.cn/tags/att_frame_noresize.asp

页面中用frameset frame的话不能有body、form标签

在一个frame中操作另一个frame的src,的js脚本是

window.parent.ftable.location.replace('../djsbsxxtznew/DjsbTable.aspx?jdid="+value+"')

也可以是window.parent.ftable.location.href='../djsbsxxtznew/DjsbTable.aspx?jdid="+value+"'

在后台可以是

 this.Page.RegisterStartupScript("script", "<script>window.parent.ftable.location.replace('../djsbsxxtznew/DjsbTable.aspx?jdid="+value+"')</script>");

貌似不能像iframe中的3那样 从一个frame调用另一个frame里的js函数

 

2.文本框textarea高度随内容自适应增长收缩及控制textarea字数

 

<script type="text/javascript">
	 window.onload = function() {  
	  var t=document.getElementById('TextArea1');
            t.onkeyup= function() {  
                var len = t.value.length;  
                var tmp = 10 - len;  
                if (tmp <= 0) {  
                    this.value = t.value.substring(0, 10);  
                    document.getElementById("mes").innerHTML = "您还可以输入 0 个字符";  
                } else {  
                    document.getElementById("mes").innerHTML = "您还可以输入 " + tmp + " 个字符";  
                }  
        /************字数限制结束****文本框自动变化开始***********/
          var minRows = 1;  // 最小高度 , 减少行时保留的最少行数
          var maxRows = 12; // 最大高度,超过则出现滚动条
	        	if (t.scrollTop == 0) t.scrollTop=1;
		        while (t.scrollTop == 0){
		     	if (t.rows > minRows)
				t.rows--;
			else
				break;
			   t.scrollTop = 1;
			   if (t.rows < maxRows)
				t.style.overflowY = "hidden";
			   if (t.scrollTop > 0){
				t.rows++;
				break;
			    }
		     }
		       while(t.scrollTop > 0){
			   if (t.rows < maxRows){
			   t.rows++;
			   if (t.scrollTop == 0) t.scrollTop=1;
			    }
		  else{
				t.style.overflowY = "auto";
				break;
			    }
		     }
		   } 
        }  
    </script>

 

3.当我们通过URL进行页面传值时,当我们的URL中含有非数字英文等特殊字符时可能会导致传值出错,我们可以用以下传递页编码接受页解码的方法来解决这个问题,这样做还可以使浏览者不那么轻易的看到我们传递的值

HttpUtility.UrlEncode HttpUtility.UrlDecode  |  Server.UrlEncode Server.UrlDecode

 

4.关于AspnetUpload

http://www.aspnetupload.net

http://www.cxfeel.cn/blog/article.asp?id=36

http://www.cnblogs.com/paker/archive/2006/03/28/361253.html

http://www.cnblogs.com/bestcomy/archive/2004/06/09/14267.html

http://www.cnblogs.com/bestcomy/archive/2005/03/04/112726.html

http://topic.csdn.net/u/20090902/15/901bfff3-f481-4b9c-9dcf-5e728f2d9e09.html

 

5.关于NeatUpload

http://bbs.51aspx.com/archiver/showtopic-12616.html

http://www.cnblogs.com/JeffreyZhao/archive/2008/02/12/aspnet_upload.html

 

6.web.config配置

.NET某目录:%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\

配置级别:计算机(.NET某目录下machine.config)、站点(.NET某目录下web.config)、应用程序(根web.config)、子目录(某目录里的web.config)或页(某页面)   这些配置文件是后面的继承前面的

http://www.cnblogs.com/dupeng0811/archive/2009/04/10/1433064.html|web.config|节点解释

http://blog.csdn.net/zhoufoxcn/archive/2008/11/10/3265141.aspx

http://edu.codepub.com/2010/0721/24414.php|自定义配置节(配置节组<sectionGroup> 配置节<section>)

http://www.cnblogs.com/solucky/archive/2006/09/02/493114.html

 

7.语音聊天  http://www.cnblogs.com/stg609/archive/2008/11/19/1334544.html

 

8.HTTP请求流程 ASP.NET应用程序生命周期    http://www.cnblogs.com/stg609/archive/2008/07/28/1255118.html

http://www.tracefact.net/Asp-Net-Architecture/Http-Request-Processing-Flow.aspx

http://www.cnblogs.com/stg609/articles/1224943.html

http://www.cnblogs.com/xiaopin/archive/2010/08/26/1808956.html

 

9.HttpModule(HTTP模块) http://www.cnblogs.com/stg609/archive/2008/08/03/1258898.html

http://www.cnblogs.com/cyan/archive/2009/02/04/1383580.html

HttpHandler http://www.tracefact.net/Asp-Net-Architecture/Introduction-to-Http-Handler.aspx

 

10. .NET多线程(异步)

http://www.cnblogs.com/zoupeiyang/archive/2011/05/18/2050371.html

每个应用程序域只有一个线程池(线程池有创建线程数的限制,缺省值为25)可用线程 

http://www.cnblogs.com/joechen/archive/2009/04/28/1445425.html

http://www.cnblogs.com/joechen/archive/2009/04/28/1445490.html

http://hi.baidu.com/ren_long_/blog/item/2ff2a85899460b212934f036.html

http://www.cnblogs.com/JimmyZhang/archive/2008/08/22/1274342.html后面有点线程的东西

http://blog.csdn.net/zhoufoxcn/archive/2009/08/03/4402999.aspx

http://blog.csdn.net/zhoufoxcn/archive/2010/01/10/5170815.aspx

http://blog.csdn.net/zhoufoxcn/archive/2010/01/11/5177579.aspx

http://blog.csdn.net/zhoufoxcn/archive/2010/01/18/5205690.aspx

 

11. .NET反射 System.Reflection

http://wssmax.cnblogs.com/archive/2005/09/06/231178.html

http://www.cnblogs.com/fineboy/archive/2005/09/02/228684.html

http://www.hudong.com/wiki/.net%E5%8F%8D%E5%B0%84%E7%AE%80%E4%BB%8B

 

12. Array.ForEach()与Array.FindAll()

Array.ForEach()对指定数组里的每一个元素执行指定操作,但这是值传递,将不会影响到原数组

  protected void Button1_Click(object sender, EventArgs e)

        {

            int[] ints = new int[] { 1, 2, 3, 4, 5 };

            System.Array.ForEach<int>(ints, intplusone);

        }

  protected void intplusone(int i)

        {

            i = i + 1;

            Label1.Text += i;

        }

Array.FindAll()对指定数组里的每一个元素执行匹配,返回一个新数组,新数组包含所有匹配成功的原数组的元素

  protected void Button1_Click(object sender, EventArgs e)

        {

            int[] ints = new int[] { 1, 2, 3, 4, 5 };

            System.Array.ForEach<int>(ints, intplusone);

            int[] ints2=System.Array.FindAll<int>(ints, islagerthan2);

            foreach (var item in ints2)

            {

                Label1.Text += item;

            }

        }

 protected bool islagerthan2(int i)

        {

            if (i > 2) { return true; } else { return false;}

        }

http://hi.baidu.com/xxfjqb/blog/item/8e934708484acc900a7b8280.html

 

13.一般处理文件的原理

http://topic.csdn.net/u/20081206/19/cceec052-5590-4fbc-adf2-00b7b26ce67b.html

http://www.tracefact.net/Asp-Net-Architecture/Introduction-to-Http-Handler.aspx

http://hi.baidu.com/029yuan/blog/item/9089b32ca193a85d4ec22677.html

 

14.与Usp10.dll相关的

http://zh.wikipedia.org/zh-cn/Uniscribe#USP10.dll

 

15.在类里的静态方法和属性里不能访问该类内的非静态成员

http://blog.csdn.net/Joetao/archive/2009/05/21/4205101.aspx

http://hi.baidu.com/%B3%A7%BC%D2%B0%A2%D2%CC123/blog/item/a667e7d38be334103bf3cff1.html

 

16.委托与事件         EventHandler是一种预定义委托,位于mscorlib.System里

委托是一种特殊的类(有返回值和参数,有点像方法),声明时要加delegate关键字 public delegate void weituo(int i)

事件是较特殊的委托型变量(主要区别是声明事件时要多加一个Event关键字protected Event weituo shijian;

事件只能在类内执行,因此要在该事件所在的类外触发该事件需要通过在该类内声明一public方法,在这个方法内调用该事件(事件名(里面的参数要与其依赖的委托的参数一致))就相当于调用了注册到该事件的方法。

而正统的委托变量public weituo weituobianliang;则可以在类外被访问,给其注册一个方法,然后再调用该委托就可以触发所注册的方法。

这里讲的都是自定义的事件,而.NET自带的事件如Button的Click事件(默认注册事件是Button_Click()),Page的Load事件(默认注册事件是Page_Load())这些不需要编程人员写一个Public方法来触发该事件,这些事件会在正确的情况下(windows消息机制  )被触发(Click是单击时自动触发,Load是页面加载时自动触发,触发后将调用相应的被注册的方法)

可以通过=(只注册一个方法),+=(可注册多个方法),-=(删除注册的方法)来给委托或事件注册和删除方法。

http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html|推荐

http://www.cnblogs.com/JimmyZhang/archive/2008/08/22/1274342.html|推荐

前面说了事件也是一种委托变量,所以也不难理解有button1.Click+=new EventHandler(方法名);这样的写法了,但要弄清楚的是Button类的Click事件是EventHandler型委托的变量,所以并不是所有事件都是用EventHandler来实例化的(这样写的同时也给该事件注册一个方法)。
不过现在也可以直接用button1.Click+=方法名这样来实例化,编译器会帮我们解决的。
拿我们熟悉的按钮控件来说,当我们在设计页面双击的时候会在cs里自动生成以下方法,而这个方法同时被注册给了Button的类的Click事件,我们也可以在VS的属性--事件里给该事件注册别的方法
protected void Button1_Click(object sender, EventArgs e){}
通过Reflector我们可以看到Button类的Click事件如下定义
public event EventHandler Click;       可见事件的声明都依赖一个委托(即事件是委托的变量)
{                                                        通过事件访问器来保证只能有一个方法注册到该事件,这在第二个链接中有讲
 add{base.Events.AddHandler(EventClick,value);}    remove{base.Events.RemoveHandler(EventClick,value);}
}
为什么方法的参数一定是object sender, EventArgs e呢? 因为Click事件依赖的委托EventHandler是如下定义的(通过Reflector查看)      对于系统提供的类的事件,Sender参数只是简单地传递了指向引发事件的那个类的实例的一个引用,而e是EventArgs类型的参数,它包含了事件所携带的信息。
public delegate void EventHandler(object sender,EventArgs e);
我们知道委托的参数和返回值一定要与它指向的方法一致   看这里Lambda表达式
所以看到Button类的Command事件所注册的方法是
protected void Button1_Command(object sender, CommandEventArgs e){}
我们可以想象到Button类的Command事件是如下定义的
public event CommandEventHandler Click;   事件依赖的委托是CommandEventHandler
{
add{base.Events.AddHandler(EventCommand,value);} remove{base.Events.RemoveHandler(EventCommand,value);}
}
委托CommandEventHandler的第二个参数类型一定是CommandEventArgs
public delegate void CommandEventHandler(object sender,CommandEventArgs e);
以前看过一个用继承关系实现利用session是否登录验证的例子,也用到了事件委托
 public class BasePage:System.Web.UI.Page
    {
        public BasePage()
        {
            this.Load += new EventHandler(BasePage_Load);   //注册一个方法到Load事件
        }

        void BasePage_Load(object sender, EventArgs e)
        {
            if (Session["Admin"]==null)
            {
                Response.Redirect("~/Default.aspx");
            }
        }
    }
继承该类的子类在实例化时都会先实例化该父类,执行其BasePage构造函数,为页面的Load事件注册一个方法,当页面呈现之前执行到Load事件时就会执行该方法来验证session。

17.当黑莓手机遇到打不出电话或发不出短信的情况

18.本地连接频繁断开连接
有可能是网卡配置问题--最好将连接速度和双工模式设成自动检测
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics