我有一个下拉列表,当我设置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>
答案 0 :(得分:1)
DropDownList不应该在ItemTemplate中,因为这意味着它将为每个项目“重复”。
因为DropDownList的AutoPostBack为true,并且有一个静态事件处理程序,所以每次选择一个项目时,下拉列表中的所有项目都将触发autopostback事件。
因此,如果您的转发器中有100个项目,则每个选定的索引更改事件都会触发AutoPostBack 100次。
有意义吗?
将DropDownList移动到转发器之外,它应该可以解决您的问题。
但是,如果你必须在转发器内部(如果希望每个项目都有特定的行为),你需要在ItemCreated事件上连接SelectedIndexChanged事件:
protected void repFunctionsToAdd_ItemCreated(object sender, RepeaterItemEventArgs e)
{
DropDownList dll = e.Item.FindControl("ddlUsers");
ddl.SelectedIndexChange += ddlUsers_Sic;
}
答案 1 :(得分:-1)
如果您运行的是ASP.NET 2.0+配置,则可以将DropDownList
放在UpdatePanel
中,以防止整页回发。然后,这将仅使用ASP.NET AJAX重新呈现页面的该段。
http://msdn.microsoft.com/en-us/library/bb386454.aspx
或者,您可以编写一个javascript脚本来运行WebMethod,它可以处理需要进行的任何服务器端更改。