2010-08-14 140 views
0

我有两个列表框,执行添加删除项目功能,由四个按钮控制和o每个按钮单击那里恰好回发,但我不希望它是闪烁我为此使用更新面板这样的,但它仍然取得回传WATS出错,这说明我这个更新面板不工作

<asp:UpdatePanel ID="button" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <asp:Button ID="ButtonAdd" runat="server" Text=">" OnClick="ButtonAdd_Click" Width="50px"/><br /> 
     <asp:Button ID="ButtonRemove" runat="server" Text="<" OnClick="ButtonRemove_Click" Width="50px"/><br /> 
     <asp:Button ID="ButtonAddAll" runat="server" Text =">>>" OnClick="ButtonAddAll_Click" Width="50px"/><br />  
     <asp:Button ID="ButtonRemoveAll" runat="server" Text ="<<<" OnClick="ButtonRemoveAll_Click" Width="50px"/> 
    </ContentTemplate> 
</asp:UpdatePanel> 

回答

8

我写了一个快速的例子,确实有效。您不需要UpdatePanel中的按钮。您只需要ListBox,因为它们是唯一正在刷新的控件。设置TriggerUpdatePanel将导致没有'闪烁'发生刷新。

ASPX代码:

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<div> 
    <asp:Button ID="ButtonAdd" runat="server" Text=">" OnClick="ButtonAdd_Click" Width="50px"/><br /> 
    <asp:Button ID="ButtonRemove" runat="server" Text="<" OnClick="ButtonRemove_Click" Width="50px"/><br /> 
    <asp:Button ID="ButtonAddAll" runat="server" Text =">>>" OnClick="ButtonAddAll_Click" Width="50px"/><br />  
    <asp:Button ID="ButtonRemoveAll" runat="server" Text ="<<<" OnClick="ButtonRemoveAll_Click" Width="50px"/>  
    <asp:UpdatePanel ID="button" runat="server" UpdateMode="Always"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="ButtonAdd" EventName="Click" /> 
      <asp:AsyncPostBackTrigger ControlID="ButtonRemove" EventName="Click" /> 
      <asp:AsyncPostBackTrigger ControlID="ButtonAddAll" EventName="Click" /> 
      <asp:AsyncPostBackTrigger ControlID="ButtonRemoveAll" EventName="Click" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox> 
      &nbsp;&nbsp; 
      <asp:ListBox ID="ListBox2" runat="server"></asp:ListBox> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

CS(代码隐藏)代码:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ListBox1.Items.Add(new ListItem("Test1", "1")); 
     ListBox1.Items.Add(new ListItem("Test2", "2")); 
     ListBox1.Items.Add(new ListItem("Test3", "3")); 
     ListBox1.Items.Add(new ListItem("Test4", "4")); 
     ListBox1.Items.Add(new ListItem("Test5", "5")); 
    } 
} 

protected void ButtonRemove_Click(object sender, EventArgs e) 
{ 
    if (ListBox2.SelectedItem != null) 
    { 
     ListBox1.Items.Add(ListBox2.SelectedItem); 
     ListBox2.Items.RemoveAt(ListBox2.SelectedIndex); 
     ListBox2.ClearSelection(); 
     ListBox1.ClearSelection(); 
    } 
} 

protected void ButtonAdd_Click(object sender, EventArgs e) 
{ 
    if (ListBox1.SelectedItem != null) 
    { 
     ListBox2.Items.Add(ListBox1.SelectedItem); 
     ListBox1.Items.RemoveAt(ListBox1.SelectedIndex); 
     ListBox1.ClearSelection(); 
     ListBox2.ClearSelection(); 
    } 
} 

我测试了这一点,它的工作。我只实现了Button中的2个来呈现完整的示例。

+1

两年后,它的确切的答案,我需要! XD – boolean 2012-05-02 15:40:50

+0

@boolean那么upvote怎么样:) – Kelsey 2012-05-02 19:44:06

+0

我的不好,我太兴奋跑掉并使用代码。 Upvoted :) – boolean 2012-05-15 03:02:22

0

添加asp:ListBoxasp:UpdatePanelContentTemplate,或添加新asp:UpdatePanel,并把它添加到其ContentTemplate。如果该控件未放置在asp:UpdatePanel中,则该控件将不会使用异步回发进行更新。

用下面的代码片段新增listBox将使用异步回发新内容进行更新:

Page.aspx

<asp:UpdatePanel ID="button" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <asp:Button ID="ButtonAdd" runat="server" Text=">" OnClick="ButtonAdd_Click" Width="50px" /><br /> 
     <asp:Button ID="ButtonRemove" runat="server" Text="<" OnClick="ButtonRemove_Click" 
      Width="50px" /> 
     <br /> 
     <asp:Button ID="ButtonAddAll" runat="server" Text=">>>" OnClick="ButtonAddAll_Click" 
      Width="50px" /> 
     <br /> 
     <asp:Button ID="ButtonRemoveAll" runat="server" Text="<<<" OnClick="ButtonRemoveAll_Click" 
      Width="50px" /> 

     <asp:ListBox runat="server" ID="listBox"></asp:ListBox> 
    </ContentTemplate> 
</asp:UpdatePanel> 

样的事件处理程序的代码隐藏文件,Page.aspx.cs

protected void ButtonAddAll_Click(object sender, EventArgs e) 
{ 
    listBox.DataSource = new List<string>() { "Test" }; 
    listBox.DataBind(); 
} 
+0

我已经把我所有的代码更新面板但仍闪烁 下架Ÿ我不这么 – NoviceToDotNet 2010-08-14 12:45:30

-1
<asp:UpdatePanel ID="button" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <asp:Button ID="ButtonAdd" runat="server" Text=">" OnClick="ButtonAdd_Click" Width="50px" /><br /> 
     <asp:Button ID="ButtonRemove" runat="server" Text="<" OnClick="ButtonRemove_Click" 
      Width="50px" /> 
     <br /> 
     <asp:Button ID="ButtonAddAll" runat="server" Text=">>>" OnClick="ButtonAddAll_Click" 
      Width="50px" /> 
     <br /> 
     <asp:Button ID="ButtonRemoveAll" runat="server" Text="<<<" OnClick="ButtonRemoveAll_Click" 
      Width="50px" /> 

     <asp:ListBox runat="server" ID="listBox"></asp:ListBox> 
    </ContentTemplate> 
</asp:UpdatePanel>