2010-09-20 3 views
0

У меня есть раскрывающийся список, и когда я устанавливаю AutoPostBack = "true", страница продолжает обновляться.Autopostback продолжает обновлять сайт

любой, кто знает, что может быть неправильным?

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

ответ

1

DropDownList не должно быть внутри ItemTemplate, так как это означает, что он получит «повторил» для каждого элемента.

Поскольку DropDownList имеет AutoPostBack для истинного и одного статического обработчика событий, каждый раз, когда вы выбираете элемент, ВСЕ элементы в выпадающем списке будут запускать событие автоповтора.

Итак, если у вас есть 100 предметов в вашем ретрансляторе, AutoPostBack будет запущен 100 раз для каждого выбранного события изменения индекса.

Имеют смысл?

Переместите DropDownList на внешний ретранслятор, и он должен решить вашу проблему.

Однако, если вы должны иметь его в ретранслятора (если хотите, чтобы каждый элемент, чтобы иметь определенное поведение), вам необходимо подключить до события SelectedIndexChanged на событие ItemCreated:

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

Он имеет смысл, но он должен быть изолирован ... есть некоторые функции, которые повторяются повторителем, но каждая функция должна иметь список пользователей в раскрывающемся списке. – Joshlo

+1

@ Джошло - я хоть так. =) См. Мое обновление. – RPM1984

+0

. Он продолжает делать обратные передачи при рендеринге страницы – Joshlo

-1

Если вы используя конфигурацию ASP.NET 2.0+, вы можете поместить свой DropDownList в UpdatePanel, чтобы предотвратить полную обратную запись страницы. Затем это будет только повторно отображать этот сегмент страницы с помощью ASP.NET AJAX.

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

В качестве альтернативы вы можете написать яваскрипт скрипт для запуска WebMethod, который может обрабатывать любые серверные изменения, которые должны произойти.

+0

Почему голос? Не судить, точно так же, как учиться :) – Curt

Смежные вопросы