怎样自定义一个Asp.net服务器端的控件

翻译|其它|编辑:郝浩|2006-04-20 16:06:00.000|阅读 1154 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


大家知道在ASP.NET中微软为我们提供了大量的服务器端控件,包括HtmlControl 和WebControl。它们功能强大,为我们的编程提供了极大的方便。更重要的一点是它开放了对第三方控件的使用。这就使我们可以定制自己需要的服务器端控件。

  下面我就以一个集成化的上传组件来说明怎样自定义一个服务器端的控件,这个组件其实是HtmlInputFile、Button 和Label以及事件实现的集合。这个组件要达到的功能是要象已有的webcontrol一样,用一个设定了几个属性的标记就自动可以实现文件上传了,而不用再实现事件等。

  编写后端代码编译成一个dll

  //文件名称:WmjWebControls.cs
  using System.Drawing;
  using System.Web.UI.HtmlControls;
  using System.Web.UI.WebControls;
  using System;
  namespace Wmj
  {
      public class FileUpLoad : Panel
       {
         private HtmlInputFile htmlInputFile;
         private Button button;
         private Label label;
         public FileUpLoad() : base()
          {
             htmlInputFile=new HtmlInputFile();
             button=new Button();
             button.Text="上传";
             button.Click+=new EventHandler(this.Button_Click);
             label=new Label();
             label.Text="<font size=2>请选择上传文件的路径</font>";
             this.Controls.Add(htmlInputFile);
             this.Controls.Add(button);
             this.Controls.Add(label);
             this.Width=450;
             this.Height=30;
             this.BorderStyle=BorderStyle.Dotted;
             this.BorderWidth=1;
          }
       private void Button_Click(object sender, EventArgs e)
         {
            System.Web.HttpPostedFile postedFile=htmlInputFile.PostedFile;
            if(postedFile!=null)
             {
                try{
                     string fileName=PathToName(postedFile.FileName);
                     if(!fileName.EndsWith(Extension))
                       {label.Text="You must select "+Extension+" file!"; return;}
                          if(postedFile.ContentLength>int.Parse(FileLength))
                            {label.Text="File too big!";return;}
                          postedFile.SaveAs(SavePath+fileName);
                          label.Text="Upload File Successfully!";
                 return;
                }catch(System.Exception exc){label.Text=exc.Message;return;}
             }
           label.Text="Please select a file to upload!";
           return;
        }
       private string savePath="";
       private string extension="";
       private string fileLength="0";
       //上传的文件保存在服务器上的位置默认为c:\ 这些属性一般都是在asp.net的标记中设置也可以在codebehind中设置
      public string SavePath
       {
         get
          {
            if(savePath!="") return savePath;
            return "c:\\";
          }
         set
          {
            savePath=value;
          }
      }
    //上传文件的最大长度 单位k 默认为1k
   public string FileLength
   {
      get
       {
         if(fileLength!="0") return fileLength;
         return "1024";
        }
      set
      {
         fileLength=(int.Parse(value)*1024).ToString();
       }
   }
   //上传文件的扩展名 默认为txt
   public string Extension
   {
       get
        {
          if(extension!="") return extension;
          return "txt";
        }
      set
       {
          extension=value;
       }
   }
   public string PathToName(string path)
     {
       int pos=path.LastIndexOf("\\");
       return path.Substring(pos+1);
     }
    }
  }
  ////////////////////////////////////////////////////////////////////////////////
  ////

  将这个文件编译成dl,l放在要使用位置的bin目录下面就可以在网站中通过
  <Wmj:FileUpLoad SavePath="E:\\" FileLength="3" Extension="txt" runat="server"/>
  使用这个组件了
  下面举个调用这个控件的例子
  <%@page language="C#"%>
  <!--注意下面这一句是必须的-->
  <%@ Register TagPrefix="Wmj" Namespace="Wmj" Assembly="WmjWebControls"%>
  <html>
  <head>
  </head>
  <body>
  <form enctype="multipart/form-data" runat="server">
  <Wmj:FileUpLoad SavePath="E:\\" FileLength="3" Extension="txt" runat="server"/>
  <!--怎么样使用就是这么简单有点一劳永逸的感觉了吧-->
  </form>
  </body>
  </html>
  有了这个例子的启发,大家再也不用担心asp.net的服务器控件太少了吧。
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP