【问题标题】:Autopostback keeps refreshing siteAutopostback 不断刷新网站
【发布时间】:2010-09-20 08:30:39
【问题描述】:

我有一个下拉列表,当我设置 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>

【问题讨论】:

    标签: asp.net autopostback


    【解决方案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;
    }
    

    【讨论】:

    • 有道理,但需要在现场...有一些功能,由中继器重复,但每个功能必须在下拉列表中有一个用户列表。跨度>
    • 渲染页面时不断回发
    • 何时渲染页面?你是说第一次?嗯,这很奇怪——调试器告诉你什么?触发回发的控件是什么?
    • 这是触发回发的下拉控件,根据 Request.Form["__EVENTTARGET"]
    • 即使我把它从转发器中取出,它也会继续触发回发
    【解决方案2】:

    如果您正在运行 ASP.NET 2.0+ 配置,您可以将您的 DropDownList 放入 UpdatePanel 以防止整页回发。然后,这只会使用 ASP.NET AJAX 重新呈现页面的该部分。

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

    或者,您可以编写一个 javascript 脚本来运行一个 WebMethod,它可以处理任何需要发生的服务器端更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多