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 :

[Ajax DotNet3.5] Partial update


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Par défaut [Ajax DotNet3.5] Partial update
    Bonjour à tous,

    Ma question est surement due à une mauvaise utilisation de l'outils donc il ne faut surement pas aller chercher bien loin mais pour moi cela pause pas mal de problème.

    Je tente de développer un site asp avec l'entity framework.

    J'ai donc deux projet

    1 projet web
    1 projet library (dll) contenant mes entités.

    J'ai par exemple une page contenant le détail d'un article

    Je charge les données par l'evenement Page_Load.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    protected void Page_Load(object sender, EventArgs e)
        {
                Article article = null;
                int intArticleIdent;
     
                // On tente de transformer en entier la valeur reçu, si cela ne fonctionne pas, on renvoie l'utilisateur à la page de login.
                if (!int.TryParse(Request.QueryString["articleIdent"], out intArticleIdent))
                    Response.Redirect("~/Default.aspx");
     
                article = Article.SelectByIdent(intArticleIdent);
     
                txtIdent.Text = article.Identifiant.ToString();
                txtTpArticle.Text = article.TypeArticle;
                txtNom.Text = article.Nom;
     
                //Si l'article est un matela
                if (article is Matelas)
                {
                    // On remplit la matière
                    txtMatiere.Text = ((Matelas)article).TypeMatiereIdent.ToString();
     
                    ddlMatiere.DataSource = Sys_Type_Matiere.SelectAllByLangCode("FRA");
                    ddlMatiere.DataValueField = "Ident";
                    ddlMatiere.DataTextField = "Libelle";
                    ddlMatiere.DataBind();
                    ddlMatiere.SelectedValue = ((Matelas)article).TypeMatiereIdent.ToString();
                }
                else
                {
                    //Sinon on masque les composants
                    lblMatiere.Visible = false;
                    txtMatiere.Visible = false;
                    ddlMatiere.Visible = false;
                }
     
     
     
                grdDetails.DataSource = article.Article_Details;
                grdDetails.DataBind();
        }
     
        protected void ddlMatiere_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtMatiere.Text = ddlMatiere.SelectedValue.ToString();
            UpdatePanel1.Update();
        }
    Je veux que quand je change la matière dans ma dropdownlist, le textbox contenant la SelectedValue change.

    Le hic est qu'avec l'updatepanel quand je lui demande de ce recharger, on repasse dans le page_load même si mon scriptmanager.EnablePartial rendering = true;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:ScriptManager ID="smgMyScript" runat="server" EnablePartialRendering="true" >
    </asp:ScriptManager>
    Dois je changer mon code pour passer en paramètre la nouvelle valeur de ma dropdown ou est il possible de ne recharger que l'événement des composants contenu dans l'updatepanel?

    Merci d'avance.

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Bonjour,
    alors pour ma part je te proposerais deux solutions (il y en a certainement d'autre)

    La première : Utilisé le IsPostBack
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected void Page_Load(object sender, EventArgs e)
            {
                  if(!IsPostBack)
                  {
                        // ICI charger qu'au chargement de la page
                  }
                  else
                  {
                         // ICI charger à chaque postback donc lors de click sur 
                            un bouton ou un changement de valeur d'une texbox 
                            si l'autopostback est enable
                  }
            }
    La seconde : Utilisé plusieur update panel.
    En effet tu peu utilisé plusieurs update panel mettant la propriété UpdateMode en conditionnal au quel cas tu devras appeler UpdatePanel1.Update();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
    Voilà en espérant que ça puisse t'aider.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Par défaut
    Justement j'aimerais utiliser ta deuxième solution mais je passe toujours dans le Page_Load.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <asp:ScriptManager ID="smgMyScript" runat="server" EnablePartialRendering="true" >
        </asp:ScriptManager>
        <div style=" height:768;width:1024; text-align:center">
            <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
            <asp:Table ID="tblMain" runat="server">
                <asp:TableRow HorizontalAlign ="Center">
                    <asp:TableCell>
                        <asp:Label ID="lblIdent" runat="server" Text="Identifiant : "></asp:Label>
                        <asp:TextBox ID="txtIdent" runat="server" ReadOnly ="true"></asp:TextBox>
                    </asp:TableCell>
                    <asp:TableCell>
                        <asp:Label ID="lblTpArticle" runat="server" Text="Type d'article : "></asp:Label>
                        <asp:TextBox ID="txtTpArticle" runat="server" ReadOnly ="true"></asp:TextBox>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow HorizontalAlign ="Center">
                    <asp:TableCell>
                        <asp:Label ID="lblNom" runat="server" Text="Nom : "></asp:Label>
                        <asp:TextBox ID="txtNom" runat="server" ReadOnly ="true"></asp:TextBox>
                    </asp:TableCell>
                    <asp:TableCell>
                        <asp:Label ID="lblMatiere" runat="server" Text="Matière : " ></asp:Label>
                        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                            <ContentTemplate>
                                <asp:TextBox ID="txtMatiere" runat="server" Width="25"></asp:TextBox>
                                <asp:DropDownList ID="ddlMatiere" runat="server" 
                                    OnSelectedIndexChanged ="ddlMatiere_SelectedIndexChanged" Width="100" AutoPostBack="true">
                                </asp:DropDownList>
                            </ContentTemplate> 
                            <Triggers>
                                <asp:AsyncPostBackTrigger ControlID="ddlMatiere" 
                                    EventName="SelectedIndexChanged" />
                            </Triggers>
                        </asp:UpdatePanel>
                    </asp:TableCell>
                </asp:TableRow>
                <asp:TableRow HorizontalAlign ="Center">
                    <asp:TableCell>
                        <asp:GridView ID="grdDetails" runat="server" BackColor="White" AutoGenerateColumns ="true"
                            BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
                            ForeColor="Black" GridLines="Vertical">
                            <FooterStyle BackColor="#CCCCCC" />
                            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                            <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
                            <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
                            <AlternatingRowStyle BackColor="#CCCCCC" />      
                        </asp:GridView>
                    </asp:TableCell>
                </asp:TableRow>
            </asp:Table>
            </ContentTemplate> 
            </asp:UpdatePanel>
        </div>
    Peut être ai je oublié quelque chose dans le code.

    (je viens d'application winform et j'avoue que l'asp est pour moi très nouveau, si vous avez des conseils pour la bonne utilisation de l'outils, je suis toujours preneur.)

  4. #4
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    OK, c'est normal qu'il repasse dans le page load avec un update panel, Utilise simplement le pour chinté les lignes de code que tu ne veux pas rappeler et je pense que tu aura résolu ton problème.

    L'update panel en "condionnal" est plus généralement utilisé pour géré disons l'interface et ainsi recharger tel ou tel bloc de ta page. Dans ton cas c'est à priori plutôt la solution qu'il te faut utiliser; sachant que les deux sont compatible

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2004
    Messages : 157
    Par défaut
    Parfait, merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2012, 15h33
  2. [Ajax] Updatepanel qui s'update pas.
    Par ketthos dans le forum ASP.NET
    Réponses: 5
    Dernier message: 18/02/2008, 14h48
  3. [AJAX] Ajax update cote client
    Par Marco77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/01/2007, 15h26
  4. Partial update, et grooooosse combo list
    Par johan_barbier dans le forum XMLRAD
    Réponses: 7
    Dernier message: 19/10/2005, 17h40

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