2010-09-20 27 views
0

J'ai une liste déroulante, et lorsque je règle AutoPostBack = "true", la page continue d'être rafraîchie.L'autoropostback permet de rafraîchir le site

Qui sait ce qui pourrait être faux?

<asp:Repeater ID="repFunctionsToAdd" runat="server" OnItemDataBound="repFunctionsToAdd_ItemDataBound"> 
<ItemTemplate> 
    <div class="person-section"> 
    <div class="row"> 
     <strong> 
     <%# Eval("Name") %> 
     </strong> 
     <a class="btn-question" href="#">question</a> 
     <div class="load"> 
     <img src="../images/load<%# Eval("PreProductionLoad") %>.gif" width="40" height="16" alt="image description" /> 
     <img src="../images/load<%# Eval("ProductionLoad") %>.gif" width="40" height="16" alt="image description" /> 
     <img src="../images/load<%# Eval("PostProductionLoad") %>.gif" width="40" height="16" alt="image description" /> 
     </div> 
    </div> 
    <div class="row"> 
     <div class="btn01 btn-tilfoj"> 
     <ctrl:Hyperlink ID="hlAddFunction" runat="server" Icon="Plus" Text="Tilføj" /> 
     </div> 
     <label for="select2"> 
     Tilføj til:</label> 
     <asp:DropDownList ID="ddlUsers" runat="server" Width="190" OnSelectedIndexChanged="ddlUsers_Sic" AutoPostBack="true" />              
    </div>             
    </div> 
</ItemTemplate> 
</Repeater> 

Répondre

1

Le DropDownList ne doit pas être à l'intérieur du ItemTemplate, car cela signifie qu'il va se « répéter » pour chaque élément. Parce que DropDownList a AutoPostBack à true et un gestionnaire d'événements statique, chaque fois que vous sélectionnez un élément, tous les éléments dans la liste déroulante déclencheront l'événement autopostback. Par conséquent, si vous avez 100 éléments dans votre répéteur, l'AutoPostBack se déclenchera 100 fois pour chaque événement de changement d'index sélectionné.

Avez-vous du sens?

Déplacez le DropDownList à l'extérieur du répéteur, et cela devrait résoudre votre problème.

Toutefois, si vous devez avoir à l'intérieur du répéteur (si vous voulez chaque élément à avoir un comportement spécifique), vous aurez besoin de câbler l'événement SelectedIndexChanged sur l'événement ItemCreated:

protected void repFunctionsToAdd_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    DropDownList dll = e.Item.FindControl("ddlUsers"); 
    ddl.SelectedIndexChange += ddlUsers_Sic; 
} 
+0

Il fait sence, mais il doit être insite ... il y a quelques fonctions, qui sont répétées par le répéteur, mais chaque fonction, doit avoir une liste d'utilisateurs dans une liste déroulante. – Joshlo

+1

@Joshlo - je le pense bien. =) Voir ma mise à jour – RPM1984

+0

Il continue de faire des postbacks lors du rendu de la page – Joshlo

-1

Si vous êtes en exécutant une configuration ASP.NET 2.0+, vous pouvez mettre votre DropDownList dans un UpdatePanel pour empêcher la publication d'une page entière. Cela ne ferait que re-rendre ce segment de la page en utilisant ASP.NET AJAX.

http://msdn.microsoft.com/en-us/library/bb386454.aspx

Sinon, vous pouvez écrire un script javascript pour lancer un WebMethod qui pourrait gérer tout changement côté serveur qui doivent se produire.

+0

Pourquoi le vote à la baisse? Ne pas le juger, j'aime apprendre :) – Curt