我在以前的开发中经常遇到这样的场景:文件上传之后需要显示文件名,但是asp.net自带的fileupload是不能付给上传后的文件名值的。

以前都是做一个label显示的,今天想起来了,写个控件封装一下,直接上代码

控件的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace Fang
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:FangFileUpload runat=server></{0}:FangFileUpload>")]
public class FangFileUpload : FileUpload
{
/// <summary>
/// 指示是否上传成功,上传成功后直接反应文件名称和一个删除按钮
/// </summary>
[
Browsable(false),
Description("设置或获取是否上传成功的标记")
]
public bool IsUploaded
{
get { return ViewState["IsUploaded"] == null ? false : (bool)ViewState["IsUploaded"]; }
set { ViewState["IsUploaded"] = value; }
}
/// <summary>
/// 上传成功的文件名啊
/// </summary>
public string UploadedFileName
{
get { return ViewState["UploadedFileName"] == null ? null : ViewState["UploadedFileName"].ToString(); }
set { ViewState["UploadedFileName"] = value; }
}
/// <summary>
/// 微软默认在这里加了file属性,去掉
/// </summary>
/// <param name="writer"></param>
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
//没有上传的时候客户端才需要id和name
if (!this.IsUploaded)
{
string uniqueID = this.UniqueID;
if (uniqueID != null)
{
writer.AddAttribute(HtmlTextWriterAttribute.Name, uniqueID);
}
string clientID = this.ClientID;
if (clientID != null)
{
writer.AddAttribute(HtmlTextWriterAttribute.Id, clientID);
}
}
}
/// <summary>
/// 判断是应该显示div,还是file
/// </summary>
protected override HtmlTextWriterTag TagKey
{
get
{
if (IsUploaded)
{
return HtmlTextWriterTag.P;
}
else
{
return HtmlTextWriterTag.Input;
}
}
}
/// <summary>
/// 输出div或者file
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
if (!IsUploaded)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "file"); base.Render(writer);
}
else
{
base.RenderBeginTag(writer);
writer.Write(string.IsNullOrEmpty(UploadedFileName) ? "未命名上传文件" : UploadedFileName);
base.RenderEndTag(writer);
}
}
}
}

  

测试代码:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="FangFileUpload" Namespace="Fang" TagPrefix="Fang" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server"> <Fang:FangFileUpload ID="FangFileUpload1" runat="server" />
<br />
<asp:Button ID="btn" runat="server" OnClick="btn_Click" Text="upload"/> </form>
</body>
</html>

  

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void btn_Click(object sender, EventArgs e)
{
if (FangFileUpload1.HasFile)
{
FangFileUpload1.SaveAs(Server.MapPath("~/upload/") + FangFileUpload1.FileName);
//上传成功
FangFileUpload1.IsUploaded = true;
FangFileUpload1.UploadedFileName = FangFileUpload1.FileName;
}
}
}

  

最新文章

  1. MapReduce剖析笔记之一:从WordCount理解MapReduce的几个阶段
  2. C#的变迁史 - C# 3.0篇
  3. linux上安装jdk并添加环境变量
  4. C语言动态调用库(转)
  5. FreeMarker 一二事 - 静态模板结合spring展示
  6. 每天php函数 - floatval() 获取变量的浮点值
  7. 关于真机调试DDMS中的data文件夹打不开的解决方法
  8. JavaScript中的自调用函数
  9. C# 配置文件读取与修改
  10. 快速检查SQL两表数据是否一致
  11. 小巧的UML工具-UMLet
  12. OC字典的使用
  13. 洛谷P4577 [FJOI2018]领导集团问题(dp 线段树合并)
  14. 五一培训 清北学堂 DAY2
  15. c# 模拟POST上传文件到服务器
  16. 关于&quot;引用&quot;的几点说明
  17. tcpdump抓包笔记
  18. Frame-Relay交换机
  19. openssl windows平台编译库
  20. redis之(十四)redis的主从复制的原理

热门文章

  1. BZOJ1861:[ZJOI2006]书架
  2. bzoj 3501 PA2008 Cliquers Strike Back —— 贝尔数
  3. 抽屉header
  4. RT-Thread的线程(任务)处理 rt_thread_create/rt_thread_init区别
  5. 监控mysql主从同步状态是否异常
  6. Lagom学习 (二)
  7. Apache日志解读
  8. eclipse&amp;nbsp;maven&amp;nbsp;plugin&amp;amp;n…
  9. ABP 软删除ISoftDelete
  10. Flask中的后端并发思考(以Mysql:too many connections为例)