IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[ASP.NET 1.1] UserControl en AJAX


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut [ASP.NET 1.1] UserControl en AJAX


    Pour mon projet, je dois charger un .ascx selon le choix fait dans un RadioButtonList sans Postback

    Seulement, c'est pas aussi facile que ca en a l'air.

    Pour l'AJAX, j'ai déjà fait des essai et j'utilises ces méthodes (prises sur ce site :p)

    function getXhr()
    {
    var xhr = null;
    if(window.XMLHttpRequest) // Firefox et autres
    xhr = new XMLHttpRequest();
    else if(window.ActiveXObject)
    { // Internet Explorer
    try
    {
    xhr = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    else
    { // XMLHttpRequest non supporté par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    xhr = false;
    }
    return xhr;
    }

    function bindVente()
    {
    var xhr = getXhr();
    /* var i = 0;
    while (document.getElementById('<%=ActivityTypeRadioButtonList1.ClientID + "_"%>'+i).checked == false)
    {
    i++;
    }*/

    // On défini ce qu'on va faire quand on aura la réponse
    xhr.onreadystatechange = function()
    {
    document.getElementById('<%=PanelUpdateVente.ClientID%>').innerHTML = "<img id='img1' src='../../../images/ajax-loader.gif'>";

    alert(xhr.readyState);
    alert(xhr.status);
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    if(xhr.readyState == 4 && xhr.status == 200) {

    leselect = xhr.responseText;
    alert(xhr.responseText);
    // On se sert de innerHTML pour rajouter les options a la liste
    document.getElementById('<%=PanelUpdateVente.ClientID%>').innerHTML = leselect;
    }
    }

    // Ici on va voir comment faire du post
    xhr.open("POST","Activity.aspx",true);
    // ne pas oublier ça pour le post
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments

    id = document.getElementById('<%=ActivityTypeRadioButtonList1.ClientID + "_"%>'+1).value
    xhr.send("Vente="+id);
    }
    Dans le Page_load de mon .aspx je récupère le paramètre passé en POST

    if (Request.Params["Vente"] != null)
    {
    ManageActivityInVente.isInActivity = true;
    ManageActivityInVente.FirstLoad = true;
    ManageActivityInVente.ActivityTypeId = long.Parse(Request.Params["Vente"]);

    //HtmlTextWriter htw = new HtmlTextWriter(Response.Output);
    //this.RenderControl(this.CreateHtmlTextWriter(Response.Output));

    ManageActivityInVente.GetHTMLFromActivity();

    //Response.ClearContent();
    //Response.ClearHeaders();
    //Response.Flush();
    //Response.Close();
    }
    Et dans mon .ascx, je créé une méthode qui devrait injecter dans le Response.Output le code HTML du composant

    public void GetHTMLFromActivity()
    {
    //Response.Clear();
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();

    HtmlTextWriter htw = new HtmlTextWriter(Response.Output);


    ManageActivityInVente.RenderControl(htw);

    Response.Flush();
    Response.Close();


    }
    Seulement, je passes bien les 4 étapes mais le status retourné est une erreur 500

    donc, est ce possible de renvoyer un .ascx en HTML que je l'intègre dans ma page ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    essai de faire comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     StringBuilder sb = new StringBuilder();
        StringWriter tw = new StringWriter(sb);
        HtmlTextWriter hw = new HtmlTextWriter(tw);
        ctrl.RenderControl(hw);
     Response.Write(sb.ToString());

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Même souci.
    Lors du débug le code arrive sur et me renvoie l'étape 4 au status 500 sans finir.

    J'ai essayé avec .Render mais pareil.

    Apparement le .RenderControl renvoie une réponse sans qu'il sois possible de l'intercepter

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    euh j'avais pas bien lu la première fois.

    Comment tu fais ton mecanisme ajax?

    t sur page1 tu met en place ton XmlhttpRequest ensuite tu apelles koi(Page Webservice...)?
    et que fais tu dans ce qui est appelé?
    comment tu charge ton ascx?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Citation Envoyé par gyzmau Voir le message
    euh j'avais pas bien lu la première fois.

    Comment tu fais ton mecanisme ajax?

    t sur page1 tu met en place ton XmlhttpRequest ensuite tu apelles koi(Page Webservice...)?
    et que fais tu dans ce qui est appelé?
    comment tu charge ton ascx?
    Déjà mon xhr est sur le control ManageActivity1.ascx
    Ce controle possède une liste de RadioButton qui affiche ManageActivityInVente.ascx (qui est aussi un ManageActivity)

    Sur ma page Activity.aspx, j'ai donc 2 controles ManageActivity nommé differement.

    Lors de la sélection du RadioButton, j'appelle donc Activity.aspx avec "Vente" en POST.
    J'aimerais qu'il me retournes le HTML de ManageActivityInVente.ascx afin que je fasse un innerHTML sur le Panel en dessous du RadioButtonList.

    Voila en gros le fonctionnement prévu

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Pkoi ne pas utiliser un update Panel?

    sinon quand j'utilise XMLHTTPRequest c'est que pour appeller un webservice, une page ou autre; Je me demande si appeller la page où tu es ne peux pas poser des problèmes avec asp.net. L'updatepanel le fais très bien.

    Sinon essai d'appeller une page 'externe' (une autre page en gros) ou tu fais un load control et tu fais la meme chose pour le render et le Response.Write.

  7. #7
    Membre éclairé Avatar de flogreg
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    432
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 432
    Par défaut
    Citation Envoyé par gyzmau Voir le message
    Pkoi ne pas utiliser un update Panel?
    Je ne pense pas qu'on puisse l'utiliser en 1.1 ?

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Arf saleté de réflexe je résonne plus en 1.1.

    Tu as raison flogreg, pas d'ajaxcontroltoolkit en 1.1.

    A voir ma deuxième remarque; appeller sa propre page peut ,peut etre, poser des problèmes.
    aussi as tu essayer avec juste un truc très basique du style?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Response.Write("testing");

  9. #9
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Citation Envoyé par gyzmau Voir le message
    Arf saleté de réflexe je résonne plus en 1.1.

    Tu as raison flogreg, pas d'ajaxcontroltoolkit en 1.1.

    A voir ma deuxième remarque; appeller sa propre page peut ,peut etre, poser des problèmes.
    aussi as tu essayer avec juste un truc très basique du style?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Response.Write("testing");
    Oui je suis en 1.1 et c'est bien chiant

    J'ai essayé sur une autre page .aspx et c'est pareil.
    Ca plante dès que j'appelle le .Render du UserControl.

    Je crois que je vais repasser en mode normal.

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    ton UserControl tu le charge avec loadcontrol?
    Si oui je commence a être à court d'idées

  11. #11
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Chargé dans le OnInit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ManageActivityInVente = (ManageActivity)LoadControl("ManageActivity.ascx");


    Sinon, j'essayes de voir avec postback, le souci est que lors du postback, je perds les données contenu dans l ascx

Discussions similaires

  1. [Débutant] [ASP.NET MVC] Gérer son propre AJAX
    Par Tigrounet dans le forum ASP.NET Ajax
    Réponses: 12
    Dernier message: 07/07/2015, 14h51
  2. AJAX + asp.net en net 1.1
    Par wayak3 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/02/2007, 11h00
  3. [AJAX] Ajax et ASP.NET
    Par boleduch dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/03/2006, 16h15
  4. XMLRAD equivalent usercontrol ASp .NET
    Par le-roy_a dans le forum XMLRAD
    Réponses: 10
    Dernier message: 10/12/2004, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo