Autopostback обновляет сайт - PullRequest
       10

Autopostback обновляет сайт

0 голосов
/ 20 сентября 2010

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

Кто-нибудь знает, что может быть не так?

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

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

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

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

Так что, если у вас есть 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 голосов
/ 20 сентября 2010

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

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

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

...