2013-04-22 11 views
9

Ho un controllo immagine all'interno del pannello di aggiornamento, nel caricamento della pagina sto impostando il suo URL.nell'aggiornamento fa sì che l'intera pagina venga aggiornata

codice dietro in Page_Load

string url = "example.com"; 
Image1.ImageUrl = url; 

all'interno UpdatePanel in aspx

<asp:Image ID="Image1" runat="server" CssClass="image" /> 

Ho anche paio di presentare pulsanti all'interno del UpdatePanel, e sto aggiornando alcuni texboxes e le etichette sui clic sui pulsanti.

tuttavia ciò causa l'aggiornamento di tutta la pagina. (la barra di scorrimento si alza.)

se non si sposta l'immagine all'esterno del pannello di aggiornamento. il problema è che il layout non funziona affatto se rimuovo l'immagine all'esterno di updatepanel. qualcuno può aiutarmi con questo? Grazie.

UPDATE

ho realizzato accade questo solo in Chrome. Qualcuno ha un'idea?

UPDATE 2 In questa pagina ho risolto il problema rimuovendo img dall'aggiornamento. È stato un inferno far funzionare il layout, ma ha funzionato.

Tuttavia, ho un'altra pagina, dove sto aggiungendo un nuovo imgs all'aggiornamento quando un utente fa clic su carica di più. Stesso affare, e ovviamente non posso spostare l'immagine fuori dal pannello di aggiornamento questa volta. Ecco il codice.

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 

     <!--Recent Uploads--> 
     <div class="uploads"> 
      <h2>Uploads</h2> 
      <asp:UpdatePanel ID="RecentUpload" runat="server" UpdateMode="Conditional"> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="loaduploads"/> 
       </Triggers> 
       <ContentTemplate> 
        <asp:Button CssClass="uploadButton" ID="loaduploads" runat="server" Text="Load More" OnClick="loaduploads_Click" /> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
     </div> 

codice dietro (indice di upload è una variabile di sessione)

upload_index += 5; 
     for (int i = 0; i < upload_index; i++) 
     { 
      try 
      { 
       SSImage img = images[i]; 
       HyperLink imglink = new HyperLink(); 
       imglink.NavigateUrl = "/Image.aspx?id=" + img.id; 
       imglink.ImageUrl = "/ShowImage.ashx?imgid=" + img.id; 
       imglink.ToolTip = img.title; 
       imglink.CssClass = "imgupload"; 
       Control contentpanel = RecentUpload.ContentTemplateContainer; 
       contentpanel.Controls.AddAt(contentpanel.Controls.Count - 2, imglink); 
      } 
      catch (ArgumentOutOfRangeException) 
      { 
       loaduploads.Visible = false; 
       break; 
      } 
     } 

UPDATE 3

il problema non si verifica con le immagini statiche, piuttosto succede quando sto cercando di caricare da showimage.ashx. ecco il codice.

<%@ WebHandler Language="C#" Class="ShowImage" %> 

using System; 
using System.Web; 
using System.IO; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 

public class ShowImage : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     SqlDataReader rdr = null; 
     SqlConnection conn = new SqlConnection(); 
     SqlCommand cmd = new SqlCommand(); 

     try 
     { 
      string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      conn = new SqlConnection(connStr); 

      cmd = new SqlCommand("SELECT Image_data FROM [Image_table] WHERE Image_id = " + context.Request.QueryString["imgID"], conn); 
      conn.Open(); 
      Object result = cmd.ExecuteScalar(); 
      //if nothing found throw exception 
      if (result == null) 
      { 
       throw new Exception(); 
      } 
      rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       context.Response.ContentType = "image/jpg"; 
       context.Response.BinaryWrite((byte[])rdr["Image_data"]); 
      } 

      if (rdr != null) 
       rdr.Close(); 
     } 
     catch 
     { 

     } 
     finally 
     { 
      conn.Close(); 
      conn.Dispose(); 
     } 

    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

} 
+0

Avere y metti 'Trigger' nel tuo pannello di aggiornamento? – zey

+0

@zey sì ho 'asyncpostbacktrigger' – btevfik

+0

Puoi pubblicare il tuo codice? – zey

risposta

2

Si dovrebbe usare Asynchronous grilletto palo del pannello di aggiornamento qui è l'esempio:

<asp:AsyncPostBackTrigger ControlID="" EventName=""/> 

dove 'ControlID' è un id di elemento che può causare il postback e 'nomeevento' è il evento particolare attivato dal controllo definito per causare il postback

+0

ce l'ho già. – btevfik

1

Aggiungere un altro pannello di aggiornamento e inserire il tag dell'immagine in questo pannello di aggiornamento e quindi impostare la proprietà "updatemode" su "always".

prova questo risolvendo il tuo problema di sicuro. se non me lo faccia sapere.

1

A mio parere,

Si dovrebbe cercare di aggiungere controlli al corpo invece di aggiornare il ContentTemplate del UpdatePanel vale a direCreare un controllo Panel in ContentTemplate e aggiungere tutto in quello e aggiornare qualsiasi cosa in quello Panel, non lo ContentTemplate.

Controllare la sintassi logica e aspx che mostra aggiungere controlli Panel che è contenuto nel UpdatePanel > ContentTemplate

ASPX

<asp:UpdatePanel ID="RecentUpload" runat="server" UpdateMode="Conditional"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="loaduploads"/> 
     </Triggers> 
     <ContentTemplate> 
      <asp:Panel ID="pnlMyDynamicContent" runat="server"> 
       <asp:Button CssClass="uploadButton" ID="loaduploads" runat="server" Text="Load More" OnClick="loaduploads_Click" /> 
      </asp:Panel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Codice Dietro

ad_index += 5; 
    for (int i = 0; i < upload_index; i++) 
    { 
     try 
     { 
      SSImage img = images[i]; 
      HyperLink imglink = new HyperLink(); 
      imglink.NavigateUrl = "/Image.aspx?id=" + img.id; 
      imglink.ImageUrl = "/ShowImage.ashx?imgid=" + img.id; 
      imglink.ToolTip = img.title; 
      imglink.CssClass = "imgupload"; 

      // Commented old code 
      //Control contentpanel = RecentUpload.ContentTemplateContainer; 
      //contentpanel.Controls.AddAt(contentpanel.Controls.Count - 2, imglink); 

      //Add controls to Panel instead of updating the ContentTemplate itself 
      pnlMyDynamicContent.Controls.AddAt(pnlMyDynamicContent.Controls.Count - 2, imglink); 
     } 
     catch (ArgumentOutOfRangeException) 
     { 
      loaduploads.Visible = false; 
      break; 
     } 
    } 
+0

grazie per la risposta. In realtà l'ho fatto in origine, ma ha avuto lo stesso risultato. – btevfik