События пользовательского управления

#asp.net

#asp.net

Вопрос:

У меня возникла проблема при записи события для пользовательского управления ImageUpload.

Я хочу добавить событие, которое срабатывает при нажатии кнопки imagebutton, в данном случае на зеленую кнопку ok. Я пишу некоторый код для события, но он вызывается при загрузке страницы () и при обратной передаче, поэтому это вызывает проблему -> Путь к изображению, который предоставляется для загрузки изображения, становится понятным после загрузки изображения, но при обновлении страницы одно и то же изображение загружается снова и снова при каждом обновлении страницы.

Код пользовательского управления

 public partial class Gallery_Controls_ImgUpload : System.Web.UI.UserControl
{    
  protected void Page_Load(object sender, EventArgs e)
  { }

   public string TxtDesc    
    {        
       get {return txtimgdesc.Text;}        
       set { txtimgdesc.Text = value; }
    }    
    public string TxtImgName    
    {        
       get { return txtimgname.Text; }        
       set { txtimgname.Text = value; }    
    }    
    public FileUpload ImgUpld    
    {        
       get { return ImgUpload; }        
       //set { ImgUpload = value; }    
    }    
    public string ImgAttr    
    {        
       get { return ImgUpload.Attributes["onchange"]; }        
       set { ImgUpload.Attributes["onchange"] = value; }    
    }    

    public event EventHandler ImgBtnUpClick;    
    protected void imgbtnok_Click(object sender,EventArgs e)    
     {        
        ImgBtnUpClick(ImgUpload, e);    
     }
  

Код для добавления элемента управления на страницу и загрузки файла

 public partial class Gallery_iupload : System.Web.UI.Page
{    
    ASP.gallery_controls_imgupload_ascx upctrl;

    protected void Page_Load(object sender, EventArgs e)    
    {
           upctrl = (ASP.gallery_controls_imgupload_ascx)LoadControl ("Controls/ImgUpload.ascx");
           upctrl.ImgBtnUpClick  = new EventHandler(Upload);
           upctrl.ImgAttr = "checkFileExtension(this); return false;"; 
           PlaceHolderupctrl.Controls.Add(upctrl);                    
    }
    protected void Upload(object sender, EventArgs e)
    {        
        TextBox txtbximgname = (TextBox)upctrl.FindControl("txtimgname");
        TextBox txtbxdesc = (TextBox)upctrl.FindControl("txtimgdesc");
        FileUpload Imgload = (FileUpload)sender;
        if (Imgload.HasFile)
            try{
                Imgload.SaveAs("C:\Uploads\"   txtbximgname.Text   ".jpg");                   
                Label1.Text = "File name: "   Imgload.PostedFile.FileName   "<br>"  
                Imgload.PostedFile.ContentLength   " kb<br>"  "Content type: "  
                Imgload.PostedFile.ContentType;
                }
            catch (Exception ex)
            {
                Label1.Text = "ERROR: "   ex.Message.ToString();
            }
        else
        {
            Label1.Text = "You have not specified a file.";
        }
    }
}
  

Ответ №1:

вы должны установить проверку IsPostBack в вашем page_load:

  protected void Page_Load(object sender, EventArgs e)        
{           
    if (!Page.IsPostBack)
    {   upctrl = (ASP.gallery_controls_imgupload_ascx)LoadControl ("Controls/ImgUpload.ascx");               
        upctrl.ImgBtnUpClick  = new EventHandler(Upload);           
        upctrl.ImgAttr = "checkFileExtension(this); return false;";            
        PlaceHolderupctrl.Controls.Add(upctrl);      
    }                  
}