1

我正在使用 asp.net C# 文件上传。我遇到了一个问题,即当我上传图片并将其存储在指定文件夹中时,刷新页面后,图片再次上传的次数与页面刷新次数一样多。我尝试启用和禁用 ViewState 选项,但同样的问题仍然存在。我已经对我的功能进行了编码,当上传图片时,它会立即获得一个唯一的名称,因此图片不会被覆盖。任何人都可以解释如何控制这种行为,以便只在指定的上传按钮上上传图片,而不是通过刷新页面。以下是我正在使用的主要代码:

protected void btnUpload_Click(object sender, EventArgs e)
{

 if ((Session["Img1"] != null) && (Session["Img2"] != null) && (Session["Img3"] != null) && (Session["Img4"] != null))
    {
        lblUploadMsg.Text = "You cannot upload more than 4 pictures";
        return;
    }
    if (FileUpload1.HasFile)
    {
        string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName);
        if (fileExtension.ToLower() == ".jpg")
        {
            int fileSize = FileUpload1.PostedFile.ContentLength;

            if (FileUpload1.PostedFile.ContentLength < 2097152)
            {

                //FileUpload1.SaveAs(Server.MapPath("~/Temp/" + FileUpload1.FileName));
                //Response.Write("Successfully Done");

                string sp = Server.MapPath("~/ItemPictures/");
                String fn = Guid.NewGuid().ToString() + FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf("."));
                if (sp.EndsWith("\\") == false)
                    sp += "\\";
                sp += fn;
                FileUpload1.PostedFile.SaveAs(sp);
                lblUploadMsg.ForeColor = System.Drawing.Color.Green;
                lblUploadMsg.Text = "Picture Uploaded succefully. You can upload upto 4 pictures";
                Aziz.InnerHtml += "Image saved\n";

                if (Session["Img1"] == null)
                {
                    Session["Img1"] = "~/ItemPictures/" + fn;
                }
                else if (Session["Img2"] == null)
                {
                    Session["Img2"] = "~/ItemPictures/" + fn;
                }
                else if (Session["Img3"] == null)
                {
                    Session["Img3"] = "~/ItemPictures/" + fn;
                }
                else if (Session["Img4"] == null)
                {
                    Session["Img4"] = "~/ItemPictures/" + fn;
                }
            }
            else
            {
                lblUploadMsg.Text = "Maximum 2MB files are allowed";
            }
        }
        else
        {
            lblUploadMsg.Text = "Only JPG files are allowed";
        }
    }
    else
    {
        lblUploadMsg.Text = "No File was Selected";
    }
    ShowAvailblImgs();
  }

  private void ShowAvailblImgs()
   {
    if (Session["Img1"] != null)
    {
        Image1.ImageUrl = (string)Session["img1"];
        Image1.Width = 130;
        Image1.Height = 130;
        Image1.Visible = true;
    }
    else
        Image1.Visible = false;
    if (Session["Img2"] != null)
    {
        Image2.ImageUrl = (string)Session["img2"];
        Image2.Width = 130;
        Image2.Height = 130;
        Image2.Visible = true;
    }
    else
        Image2.Visible = false;
    if (Session["Img3"] != null)
    {
        Image3.ImageUrl = (string)Session["img3"];
        Image3.Width = 130;
        Image3.Height = 130;
        Image3.Visible = true;
    }
    else
        Image3.Visible = false;
    if (Session["Img4"] != null)
    {
        Image4.ImageUrl = (string)Session["img4"];
        Image4.Width = 130;
        Image4.Height = 130;
        Image4.Visible = true;
    }
    else
        Image4.Visible = false;
}
4

3 回答 3

4

您可以通过在第一次回发后清除文件上传控件的值来克服此错误。

试试这个:

FileUpload1.Attributes.Clear();
于 2013-08-01T04:53:22.853 回答
2

使用这个 FileUpload1.Attributes.Clear();

于 2013-08-01T05:49:50.767 回答
1

您可能想要跟踪请求是否是因为页面刷新。请查看以下链接以获取有关如何执行此操作的想法: Page Refresh Causes Duplicate POST in ASP.NET Applications

于 2013-08-01T00:23:44.683 回答