重写FileUpload控件让它可以显示上传后的文件名
我在以前的开发中经常遇到这样的场景:文件上传之后需要显示文件名,但是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;
}
}
}
重写FileUpload控件让它可以显示上传后的文件名的更多相关文章
- C#在WinForm中重写ProgressBar控件(带%的显示)
废话少说,直接上码: namespace csPublish { [ToolboxItem(true)] class textProgressBar : System.Windows.Forms.Pr ...
- C#picturebox控件图片以json格式上传java后台保存
关于winform上传图片到Java后端,保存到数据库,有多种方法,本文主要介绍利用picturebox控件,点击按钮上传图片,将图片转化为base64格式,以json格式上传到Java后台,再从ja ...
- el-upload控件一次接口请求上传多个文件
el-upload组件默认情况下上传多少个文件就会请求多少次上传接口,如何一次上传多个文件而不必多次请求上传接口呢?直接看代码 html <el-upload :action="act ...
- FileUpload控件使用初步
FileUpload控件使用初步 FileUpload控件使用初步: 1.实现文件上传 protected void btnSubmit_click(object sender, EventArg ...
- .NET中的FileUpload控件的使用-Jquery(一)
FileUpload在HTML中是个常用的基础控件,在涉及到上传各种格式的文件时候都会用到:笔者前段时间正好用到它做上传功能,记录下来做一些累积, 前端到后台用的是的Jquery中的Ajax进行数据传 ...
- FileUpload控件实现单按钮图片自动上传并带预览显示
FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调 ...
- Asp.net中FileUpload控件实现图片上传并带预览显示
单一图片上传——“选择”+“上传”,.NET默认模式: 1.实现原理: 采用FileUpload控件默认的使用方式,先由“选择”按钮选择图片,然后单击“上传”按钮完成上传,并可在“上传”按钮的 ...
- C# 自定义FileUpload控件
摘要:ASP.NET自带的FileUpload控件会随着浏览器的不同,显示的样式也会发生改变,很不美观,为了提高用户体验度,所以我们会去自定义FileUpload控件 实现思路:用两个Button和T ...
- FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...
随机推荐
- THUPC2019划水记
虽然早就打不动了,虽然一个队友提前说好跑路了,还是两个人来玩了玩.最大的失误是没有开场打模拟题,然后就没骗到钱,还是要向某一心骗钱不顾排名的队伍学习.这次的模拟题超简单,很愉快地就打完了,也没调多久, ...
- BZOJ1861:[ZJOI2006]书架
浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...
- Poj_1068 Parencodings
S (((( )( )() ) ) ) P-sequence 4 5 6666,表示第i个右括号的左边有几个左括号. W-sequence 1 1 1456,表示第i个右括号和以 ...
- TCP头部格式详解,附Wireshark对TCP头部抓包分析
TCP之所以能为数据通讯提供可靠的传输,主要在于TCP数据包头部功能非常多. 那么,我们先来看看TCP头部格式(RFC 793.1323定义了TCP头部): TCP头部格式中的内容解析如下:(文末还有 ...
- SIP业务基本知识
1.SIP业务基本知识 1.1 业务介绍会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终 ...
- JAVA类型信息——Class对象(转载)
JAVA类型信息--Class对象 一.RTTI概要 1.类型信息RTTI :即对象和类的信息,例如类的名字.继承的基类.实现的接口等. 2.类型信息的作用:程序员可以在程序运行时发现和使用类型信息. ...
- JSP编译指令、JSP动作指令
JSP编译指令:通过指令中的属性配置来向JSP容器发出指令,用来控制JSP页面的某些特征 JSP指令格式:<%@ 指令名 [一个或多个指令属性]%> 1.page:用于对JSP页面中的 ...
- WPF ChangePropertyAction中TargetName和TargetObject的区别
在wpf页面布局中经常用到ChangePropertyAction来更改属性,在这个里面有TargetName和TargetObject两个属性,都表示需要修改的控件名称,那么这两个有什么区别呢,通过 ...
- 4.xpath注入详解
0x01 简介 XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL.表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息.XPath注入发 ...
- HDU 5547 Sudoku (暴力)
题意:数独. 析:由于只是4*4,完全可以暴力,要注意一下一些条件,比如2*2的小方格也得是1234 代码如下: #pragma comment(linker, "/STACK:102400 ...