9
votes

Image dans UpdatePanel provoque une actualisation complète de la page

J'ai une commande d'image à l'intérieur du panneau de mise à jour, dans le chargement de la page, je définis son URL.

code derrière en page_Load p> xxx pré>

inside updatebanel dans ASPX p> xxx pré>

Je dispose également de couple de boutons de soumission à l'intérieur de l'US UpdatePanel, et je mettais à la mise à jour des clics Texbox et des étiquettes sur le bouton. P>

Cependant, cela provoque une nouvelle page à rafraîchir . (La barre de défilement monte.) P>

Si vous déplacez l'image en dehors du panneau de mise à jour, cela ne se produit pas. Le problème est que la mise en page ne fonctionne pas du tout si je retire l'image en dehors de UpdatePanel. Est-ce que quelqu'un peut m'aider avec ça? Merci. P>

Mise à jour forte> p>

Je me suis réalisé que cela ne se produit que dans le chrome. Est-ce que quelqu'un a une idée ? p>

update 2 strong> Sur cette page, j'ai résolu le problème en supprimant le IMG de l'UpdatePanel. C'est l'enfer d'obtenir le travail de mise en page, mais cela a fonctionné. P>

Cependant, j'ai une autre page, où j'ajoute de nouveaux imgs à l'UpdatePanel lorsqu'un utilisateur clique sur charge plus. Même affaire, et évidemment, je ne peux pas déplacer l'image du panneau de mise à jour cette fois-ci. Voici le code. P>

<%@ 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;
        }
    }

}


21 commentaires

Avez-vous mis déclencheurs dans votre panneau de mise à jour?


@zey oui j'ai asyncpostbacktrigger


Pouvez-vous envoyer votre code ?


@zey le tout?


updatepanel avec asyncpostbacktrigger :)


@zey j'ai mis à jour la question et mettre le code. Le code fonctionne bien dans Firefox et IE9 (N'ayez pas testé avec 10). Mais semble faire un message complet en chrome.


J'ai l'impression d'avoir vu ce problème avant ... Peu d'idées: 1) est la balise générée par HTML valide? et 2) à quoi ressemble la conversation HTTP entre le navigateur / serveur (consulté dans les outils Chrome Dev)? Peut-être qu'il y a une idée là-bas. 3) Je voudrais également joindre le débogueur de script et rechercherais des erreurs non mortelles.


@Timmedora dans l'onglet Réseau, lorsque je clique sur le bouton, il y a un poste et un bouquet gagnent pour des images. initiateur est scriptresource.axd


@Timmedora Il y a quelques avertissements sur les polices sur la console de script, mais c'est-à-dire sur toutes les pages, autres que rien


Que diriez-vous si vous exécutez la source de la page entière via validator.w3.org? Parfois, une erreur structurelle peut confondre le navigateur (et les navigateurs traitent des erreurs de différentes manières).


@Timmedora J'ai deux erreurs sur Validator pour Un élément IMG doit avoir un attribut alt. rien d'important.


Obtenu ... Êtes-vous capable de reproduire le problème avec une version dépouillée de la page? (Juste le code minimum requis pour le faire fonctionner avec tout le reste enlevé).


@Timmedora Je vais essayer de vous revenir.


@Timmedora Yep J'ai dépouillé tout. Juste un Lockbutton et sur le bouton sur le bouton, je loge des images dans UpdatePanel. ne fonctionne pas sur chrome.


Je suis à bout d'idées ... Si vous êtes capable de convertir une version autonome du projet, je vais télécharger et l'essayer sur ma machine.


@Timmedora J'ai créé un nouveau projet pour tester cela à nouveau. Et maintenant je ne peux pas le recréer. Je vais regarder plus profondément.


@Timmedora j'ai mis à jour la question s'il vous plaît jeter un coup d'oeil. Fondamentalement, le problème ne se produit pas avec des images statiques, cela se produit plutôt avec des images que je charge à partir de la base de données, en particulier de showImage.ashx.


Désolé, je viens de voir votre dernière mise à jour. J'ai créé une configuration de test avec une image servie à partir d'une ashx à l'intérieur d'un updatepanel , mais je ne pouvais pas l'obtenir pour casser IE10 ou chrome 26. J'ai essayé de servir des images valides et de lancer une exception à partir de la gestionnaire.


Par images statiques, cela fonctionne .. Cela signifie-t-il que la logique dans le bouton cliquez comme imglink.imageurl = "/showimage.ashx?imgid=" + img.id; lors de la modification de imglink. Imageurl = "/images/myimage.png"; ça marche? (La section dans laquelle vous essayez d'ajouter des contrôles au modèle de contenu de manière dynamique)


@Harshbaid oui c'est ce que je veux dire.


@Timmedora Merci d'avoir essayé d'aider. Je vous en suis reconnaissant. Pour ce faire, j'ai une sorte que je crée un site Web pour le projet de classe, et je l'ai déjà soumis. Je ne sais vraiment pas ce qui ne va pas avec ça. Si vous avez le temps et que vous souhaitez regarder le code source, le site Web est ici ici Github.com/btevfik/fuddled =/a >. Vous pouvez regarder userprofile.aspx, c'est là que se produit le problème.


3 Réponses :


2
votes

Vous devez utiliser la gâchette de post-dos asynchrone du panneau de mise à jour Voici l'exemple: xxx

où 'contrôleur' ​​est un identifiant d'élément qui peut provoquer le post-retour et le "evirname" est l'événement particulier qui est tiré par le contrôle défini pour provoquer le post-pack


0 commentaires

1
votes

Ajoutez un autre panneau de mise à jour et placez votre étiquette d'image dans ce panneau de mise à jour, puis définissez la propriété "UpdateMode" sur "Toujours".

Essayez celui-ci, cela résoudra votre problème à coup sûr. Si vous ne le faites pas savoir.


0 commentaires

1
votes

À mon avis,

Vous devriez essayer d'ajouter des contrôles au corps au lieu de mettre à jour le contenttemplate code> du updatebanel code> c.-à-d. Créer un panneau code> Contrôle dans ContentTemplate et ajoutez tout dans cela et à mettre à jour tout dans ce panneau code> pas le contenttemplate code>. p> blockQuote>

Vérifiez la syntaxe de la logique et de l'ASPX qui affiche pour ajouter des commandes à code> Panneau code> contenus dans le updatebanel> contenttemplate code> p>

ASPX STRAND> P>

    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;
        }
    }


1 commentaires

Merci pour la réponse. J'ai effectivement fait cela à l'origine, mais cela avait le même résultat.