C# 自定义FileUpload控件

简介: 摘要:ASP.NET自带的FileUpload控件会随着浏览器的不同,显示的样式也会发生改变,很不美观,为了提高用户体验度,所以我们会去自定义FileUpload控件 实现思路:用两个Button和TextBox控件来替代FileUpload控件,当点击Button时触发FileUpload控件的...

摘要:ASP.NET自带的FileUpload控件会随着浏览器的不同,显示的样式也会发生改变,很不美观,为了提高用户体验度,所以我们会去自定义FileUpload控件

实现思路:用两个Button和TextBox控件来替代FileUpload控件,当点击Button时触发FileUpload控件的点击事件,然后通过JS把FileUpload控件的Value赋给TextBox

代码:

aspx文件:

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head id="Head1" runat="server">
 3     <title></title>
 4 </head>
 5 <body>
 6     <form id="form1" runat="server">
 7     <div>
 8         <asp:FileUpload ID="FileUp" runat="server" Style="display:none;width: 180px" />
 9         <asp:TextBox ID="txtFileName" runat="server" MaxLength="100" Width="170px"></asp:TextBox>
10         <asp:Button id="btnBrowse" runat="server" style="width:60px" CssClass="btn" OnClientClick="return ShowBrowse()"
11             Text="Browse" />
12         <asp:Button ID="btnUpload" runat="server" Width="60px" CssClass="btn" OnClick="btnUpload_Click" 
13             Text="Upload" />
14     </div>
15     </form>
16     <script language="javascript" type="text/javascript">
17         function ShowBrowse()  
18         {  
19             var file1=document.getElementById("FileUp");  
20             if(file1)  
21             { 
22                 file1.click();  
23                 var isie = (document.all) ? true : false; //判断是IE内核还是Mozilla 
24                 return isie; //火狐浏览器加return false才会在选择文件后将文件名带回到textbox,IE如果返回false上传时要点击两次按钮才触发
25             }  
26         }   
27     </script>
28 </body>
29 </html>
View Code

JS文件:

1 function Check_FilePath() {
2     var FilePath = document.getElementById("FileUp");
3     var FileNewName = document.getElementById("txtFileName");
4     if (FilePath.value != '') 
5     { 
6         FileNewName.value = FilePath.value;
7     }
8 }

aspx.cs文件:

1 //Page_Load事件
2 this.FileUp.Attributes.Add("onchange", "javascript:return Check_FilePath();");
 1 //btnUpload_Click事件
 2 //当点击btnUpload_Click时,把文件上传到指定路径
 3 //需要考虑多浏览器的问题,如果是IE,直接用FileUpload控件的SaveAs功能,会保存一个空文件
 4 string strFileName="本地保存文件的路径";
 5 if (HttpContext.Current.Request.Browser.Browser == "IE")
 6 {
 7     WebClient wClient = new WebClient();
 8     wClient.DownloadFile(this.txtFileName.Text.Trim(), strFileName);
 9 }
10 else
11 {
12     this.FileUp.PostedFile.SaveAs(strFileName);
13 }

 

遗留问题:当IE浏览器安全级别高时,会取不到文件的完整路径,类似于C:\fakepath\TP.jpg,而导致保存不了;

网上的很多解决办法是手动更改IE浏览器的安全级别,我在想是否可以在代码中实现更改IE浏览器的安全级别,研究ing......

希望有解决方案的朋友们可以分享一下:)

 

如果您看了本篇博客,觉得对您有所收获,请点击右下角的 [推荐]

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

感谢您的阅读,请关注我的后续博客

目录
相关文章
|
1月前
|
SQL 开发框架 .NET
C#一分钟浅谈:数据绑定与数据源控件
在Web开发中,数据绑定和数据源控件是实现动态网页的关键技术。本文从基础概念入手,详细讲解数据绑定的原理及其在ASP.NET中的应用,并介绍常见数据绑定方式:手动绑定和自动绑定。接着,文章重点介绍了ASP.NET中的数据源控件,如`SqlDataSource`、`ObjectDataSource`、`XmlDataSource`和`LinqDataSource`,并通过具体示例演示如何使用`SqlDataSource`和`GridView`进行数据绑定。最后,还列举了一些常见问题及其解决办法,帮助读者更好地理解和应用这些技术。
58 4
|
3月前
|
C#
|
9天前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
5月前
|
C# C++
C# 自定义时间进度条
本文作者通过参考leslie_xin的一篇文章,成功创建了一个自定义的WinForms控件——时间进度条,该控件带有时间刻度和多种可定制的属性,如颜色、时间间隔等。作者在控件中加入了开始和结束时间,以及自适应的时间刻度间隔。控件能根据设置显示时间标签,并提供了事件处理,如值改变时的触发。代码中包含了计算时间刻度、绘制刻度线和时间标签的逻辑。作者强调了避免循环调用事件、使用OnXXX()形式的事件处理函数以及注意自定义控件中的属性和事件设计。
125 7
|
3月前
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
|
5月前
|
索引
详细解读c#ListBox控件
详细解读c#ListBox控件
38 0
|
6月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 Control 类
C# Web控件与数据感应之 Control 类
|
6月前
|
SQL 存储 C#
C# Web控件与数据感应之 TreeView 类
C# Web控件与数据感应之 TreeView 类
|
6月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 CheckBoxList 类
C# Web控件与数据感应之 CheckBoxList 类
|
6月前
|
SQL 存储 Oracle
C# Web控件与数据感应之 ListControl 类
C# Web控件与数据感应之 ListControl 类