FileUploadコントロールを書き換えて、アップロードしたファイル名を表示させます.

4944 ワード

私は以前の開発でよくこのようなシーンに遭遇しました:ファイルがアップロードされた後にファイル名を表示する必要がありますが、asp.Netが持参したfile uploadは、アップロード後のファイル名値には付与できません.
以前は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;

        }

    }

}