protected void Button1_Click(object sender, EventArgs e)
    {
        Boolean fileOK = false;
        String path = Server.MapPath("~/UserImage/");        if (FileUpload1.HasFile)
        {
            //检查文件格式
            string fileContentType = FileUpload1.PostedFile.ContentType;
            String fileExtension =
                System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
            String[] allowedExtensions = 
                { ".gif", ".png", ".jpeg", ".jpg" };
            for (int i = 0; i < allowedExtensions.Length; i++)
            {
                if (fileExtension == allowedExtensions[i])
                {
                    fileOK = true;
                }
            }        }
        if (fileOK)
        {
            try
            {
                //上传
                FileUpload1.PostedFile.SaveAs(path
                    + userName+".jpg");
                FileStream f1 = new FileStream(path
                    + userName + ".jpg", FileMode.Open, FileAccess.ReadWrite);
                MakeImg.MakeSmallImg(f1, path
                + "200px" + userName + ".jpg", 200, 200);//这是一个静态函数,用来生成不同大小的缩略图
                MakeImg.MakeSmallImg(f1, path
                + "60px" + userName + ".jpg", 60, 60);
                Label1.Text = "File uploaded!";
            }
            catch (Exception ex)
            {
                Label1.Text = "File could not be uploaded." + ex.Message;
            }
        }
        else
        {
            Label1.Text = "Cannot accept files of this type.";
        }    }这个是直接写在页面的代码里的,有没有办法提高重用性?而不是像这样一丢代码放在这个里面?
就是类似的要用到页面中的控件的情况,有没有更好方法完成?请问大家碰到这样的情况一般是怎么完成的?

解决方案 »

  1.   

    直接做成一个类。用的时候直接拿来用。。
    你可以在类的方法里面指定参数
    比如你这里需要使用FileUpLoad,你可以把它做成一个文件上传类。做一个方法参数用fileUpload类
      

  2.   

    可以啊,封装到类里面,其它页面 也可以用了。或者放到dll工程里面,其它工程也可以用了
      

  3.   

       /// <summary>
            /// 
            /// </summary>
            /// <param name="FileUpload1"></param>
            /// <param name="userName"></param>
            /// <returns>返回状态,为空的时候正常</returns>
            public string UP(FileUpload FileUpload1, string userName, 不知道你的MakeImg是什么类型 MakeImg)
            {
                Boolean fileOK = false;
                String path = HttpContext.Current.Server.MapPath("~/UserImage/");            if (FileUpload1.HasFile)
                {
                    //检查文件格式
                    string fileContentType = FileUpload1.PostedFile.ContentType;
                    String fileExtension =
                        System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                    String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" };
                    for (int i = 0; i < allowedExtensions.Length; i++)
                    {
                        if (fileExtension == allowedExtensions[i])
                        {
                            fileOK = true;
                        }
                    }            }
                if (fileOK)
                {
                    try
                    {
                        //上传
                        FileUpload1.PostedFile.SaveAs(path
                            + userName + ".jpg");
                        FileStream f1 = new FileStream(path
                            + userName + ".jpg", FileMode.Open, FileAccess.ReadWrite);
                        MakeImg.MakeSmallImg(f1, path
                        + "200px" + userName + ".jpg", 200, 200);//这是一个静态函数,用来生成不同大小的缩略图
                        MakeImg.MakeSmallImg(f1, path
                        + "60px" + userName + ".jpg", 60, 60);                    return "";
                    }
                    catch (Exception ex)
                    {
                        return "File could not be uploaded." + ex.Message;
                    }
                }
                else
                {
                    return "Cannot accept files of this type.";
                }        }
      

  4.   

    界面设计中的最简单的做法是开发ascx,并且将allowedExtensions 和 path 等设计为ascx的对外的属性,并在对外接口上定义一个事件来通知调用者文件上传成功的事件。一旦开发好,就可以把用户控件拖入任何页面,可以拖入多个,跟普通的asp.net控件一样使用。
      

  5.   

    sp1234说的不错。我把大致的代码给你,MakeImg类你应该有了,你在自定控件的后台代码中将它所在的命名空间引用就可以用了。using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;public partial class WebUserControl : System.Web.UI.UserControl
    {
        public string FilePath { get; set; }
        public string UserName { get; set; }
        protected void Page_Load(object sender, EventArgs e)
        {    }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Boolean fileOK = false;
            FilePath= Server.MapPath("~/UserImage/");
            UserName = HttpContext.Current.User.Identity.Name;        if (FileUpload1.HasFile)
            {
                //检查文件格式
                string fileContentType = FileUpload1.PostedFile.ContentType;
                String fileExtension =
                    System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" };
                for (int i = 0; i < allowedExtensions.Length; i++)
                {
                    if (fileExtension == allowedExtensions[i])
                    {
                        fileOK = true;
                    }
                }        }
            if (fileOK)
            {
                try
                {
                    //上传
                    FileUpload1.PostedFile.SaveAs(FilePath+userName + ".jpg");
                    FileStream f1 = new FileStream(FilePath
                        + UserName + ".jpg", FileMode.Open, FileAccess.ReadWrite);
                    MakeImg.MakeSmallImg(f1, FilePath
                    + "200px" + UserName + ".jpg", 200, 200);//这是一个静态函数,用来生成不同大小的缩略图
                    MakeImg.MakeSmallImg(f1, FilePath
                    + "60px" + UserName + ".jpg", 60, 60);
                    Label1.Text = "File uploaded!";
                }
                catch (Exception ex)
                {
                    Label1.Text = "File could not be uploaded." + ex.Message;
                }
            }
            else
            {
                Label1.Text = "Cannot accept files of this type.";
            }    }
    }
    WebUserControl.ascx代码如下:[code=HTML]
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
    <div>
    <asp:FileUpload ID="FileUpload1" runat="server" />
     <asp:Button ID="Button1" runat="server" Text="上传" onclick="Button1_Click" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    [/code]