由于种种原因,好久不来写随笔。

  其实最主要是自己懒,东西都写成word文档,懒得再搞到博客里。

  最近又来逛博客园了,也就顺带着把自己曾经菜鸟时期的东东都晒出来,因为我相信,或许某一天,某只新的菜鸟,会需要这些超级白痴+超级入门的小知识、小技巧。

  文笔烂、功夫浅、没水平,求喷。

  PS:本文适合刚接触.NET一两个月的小白+菜鸟,高手请笑而不语。

 

一、.net自带服务器控件的一点使用方法和技巧

1.runat="server"

  对于任何服务器控件都需要添加runat="server" 标记,否则此控件将不会被服务器解析,而且任何服务器控件必须放在具有runat="server"标记的<form></form>内部。

 

2.DropDownList(下拉列表控件)

(1)添加列表项的方法:  

ListItem li = new ListItem(string Text,string Value);
DropDownList.Items.Add(li);

 

(2)选择项:

  根据Text:DropDownList.Items.FindByText(string text).Selected=true;

  根据Value:DropDownList.Items.FindByValue(string value).Selected=true;

  根据Index选择项:DropDownList.SelectedIndex=1;//index从0开始编号

 

(3)获取项:

  根据Text:DropDownList.SelectedItem.Text

  根据Value:DropDownList.SelectedItem.Value

  根据Index选择项:DropDownList.SelectedIndex //index从0开始编号

  注:也可用索引:DropDowmList.Items[index]

 

3.CheckBoxList(多选框列表控件)

  RepeatDirection、RepeatLayout、RepeatColumns、CellPadding、CellSpacing属性,用于布局

 

4.FileUpload 文件上传控件

  关于这东东要怎么用,直接上源码实例或许更容易理解:

if(myFile.HasFile){//控件ID为myFile
    string strFileName=myFile.FileName;
    myFile.SaveAs(Server.MapPath(strFileName));}
else{
    Response.Write("请选择您要上传的文件");
}

  注意:利用HasFile能考虑到文件为0字节的情况,并把这种情况视为没有选择任何文件。

  另外,要注意写入权限的问题,如果用户没有上传权限,这里会抛出"对XX目录的访问被拒绝“异常,so,用之前要知道当前用户的权限,不然嘿嘿嘿,抛出红页的敢脚真的不太好。

  当然,这个代码有缺陷:

  1:只能上传体积比较小的文件(上传过大的文件在IIS中将出现“该页无法显示”);

  2:没有对文件类型和大小进行限制;

  3:没有解决重名问题。

 

  解决方案

  首先上传文件的限制是ASP.NET的一种保护机制,在Web.config中默认配置maxRequestLength4096(4MB),它可以限制用户故意通过上传大文件对服务器实行拒绝服务攻击。仅把这个参数设定得大一点还不够,上传大文件需要一定的时间,如果时间过长就会发生超时,这个时间由executionTimeout参数控制。

  eg:在Web.config的<system.web></system.web>之间添加:  

  <httpRuntime maxRequestLength="40960" executionTimeout="60" />   // 配置为最大上传文件在40MB,超时时间为60秒。

 

  接下来解决问题2和问题3。

  直接上源码实例:

        FileUpload myFile=new FileUpload();
        if(myFile.HasFile){
            string strFileName = myFile.FileName;
            string strFileExt = System.IO.Path.GetExtension(strFileName);//这个方法能从指定路径字符串提取文件扩展名 
            if(strFileExt.ToLower()==".rar"){
                string strFileNewName=DateTime.Now.ToString("yyyyMMddhhmmss")+strFileExt;
                //为了防止上传的文件重复,使用当前的时间对文件进行重命名,对于高并发的系统,则可以在时间后再添加用户名。 
                
                string strUrl=Request.Url.ToString();
                //用户下载文件的时候需要获取的文件URL不能是物理路径,需要的是对外的Web地址
                //那么可从Request.Url属性中获取当前页面的URL地址,然后取出其中不包括页面名的部分再与文件名进行拼接就能得到完整的文件下载地址。 
                
                string strFileDownloadPath=strUrl.Substring(0,strUrl.LastIndexOf('/'))+'/'+strFileNewName; 
                
                int iFileSize=myFile.PostedFile.ContentLength; 
                
                myFile.SaveAs(Server.MapPath(strFileNewName));
                //SaveAs()方法接受的是文件物理路径,物理路径就是文件在服务器上实际保存的路径。因此要用Server.MapPath()来实现从相对路径到完整物理路径的转换 
                Response.Write(string.Format("文件上传成功<br/>下载地址: {0}<br/>文件大小:{1}字节<br/>",strFileDownloadPath,iFileSize)); 
            } 
            else{ 
                Response.Write("系统只能接受rar文件"); 
            }
        } 
        else{
            Response.Write("请选择您要上传的文件"); 
        } 

 

5.IsPostBack属性

  该属性指示页面是否已经回发,常用来判断页面是否是第一次加载。若为真则说明页面已经回发,否则说明页面第一次加载。

 

6.如何在引用了母版页的内容页里面利用FindControl()方法找到页面中的控件?    

  我试过,在页面中直接使用诸如

 

Button btn=Page.FindControl ("btnPass") as Button ;

 

  实验证明,这是完全行不通的,这个btn是空引用。    

  究其原因,我个人认为问题出自于这个Page的身份,因为这个内容页引用了母板,因此这个Page指的应该是Master页,而不是Content页,所以,我们要在母版页中找到ContentPlaceHolder,并从中用FindControl方法才能找到我们想要找到的控件。    

  在内容页中,核心对象Page具有一个公共属性Master, 该属性能够实现对相关母版页基类MasterPage的引用. 隶属于母版面的MasterPage相当于普通ASP.NET页面的Page对象.由此可以使用MasterPage对象.实现母版页中各子对象的访问。    

  因此正确的方法应该是:

  Button btn= Page.Master.FindControl ("ContentPlaceHolder1").FindControl("btnPass") as Button;       

 

二、总结

  知识还是一次讲一点为好,又长又臭多不好。下次再分享一下自己以前阅读《ASP.NET第一步》时的学习笔记。

  愿意点击进来瞄瞄的,小弟均表示感激与感谢。

  共勉

posted on 2013-03-24 14:56  KwanChiLeung  阅读(1375)  评论(0编辑  收藏  举报