[C#]怎样自定义一个服务器端的控件
来源:互联网 发布:软件测试理论 编辑:程序博客网 时间:2024/05/21 06:52
大家知道在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的服务器控件太少了吧。
下面我就以一个集成化的上传组件来说明怎样自定义一个服务器端的控件,这个组件其实是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的服务器控件太少了吧。
- [C#]怎样自定义一个服务器端的控件
- 怎样自定义一个服务器端的控件
- 自定义控件的服务器端事件
- 一个自定义窗口属性的控件(C#)
- 自定义ajax验证控件-客户端引用服务器端的验证
- 服务器端控件怎样使用一键快捷方式
- 怎样添加一个自定义的LED灯?
- 一个自定义控件的Demo
- 一个简单的自定义控件
- 自定义的一个SwitchButton控件
- 一个普通的自定义控件
- 服务器端控件的属性
- 自定义控件四:一个简单的自定义控件实例
- [VB.NET]请问怎样修改自定义控件的缺省字体
- .net 服务器端自定义分页控件 简单示例
- ios怎样完美的加入一个自定义的字体
- 一个自定义的数字输入框控件
- 一个简单的级联DropdownList自定义控件
- Active Directory 迁移工具概述
- 如何组织性能最优,拓展型最好的业务层(一)
- [C#]画图全攻略
- Blitz++ 矩阵相乘(张量运算) 示例
- Linux 下 Blitz++ 的安装
- [C#]怎样自定义一个服务器端的控件
- 在Win 2003中配置ASP.net环境
- [转载] 史记·马加爵列传
- [Windows安全知识]知马识马不养马
- 什么是Web Service?
- 新年学习计划
- 面试经历
- 实现一个Asp.net自定义Back控件
- 用宏来拷贝Word文件里面的自定义样式