重写FileUpload控件让它可以显示上传后的文件名

本文介绍了一种在ASP.NET中封装自定义文件上传控件的方法,该控件能够实现在文件上传后直接显示文件名,并提供了一个简单易用的解决方案来替代ASP.NET自带的FileUpload控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在以前的开发中经常遇到这样的场景:文件上传之后需要显示文件名,但是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;
        }
    }
}

  

转载于:https://www.cnblogs.com/12taotie21/p/3227900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值