панель обновления не работает - PullRequest
0 голосов
/ 14 августа 2010

У меня есть два списка, которые выполняют функцию добавления и удаления элементов, которые управляются четырьмя кнопками, и 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>

Ответы [ 3 ]

8 голосов
/ 14 августа 2010

Я написал быстрый пример, который работает. Вам не нужны ваши кнопки в UpdatePanel. Вам нужен только ListBox, так как они являются единственными элементами управления, которые обновляются. Установка Trigger для UpdatePanel приведет к обновлению без ' мерцания '.

код 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 (codebehind) код:

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();
    }
}

Я проверил это, и оно работает. Я реализовал только 2 из Button s, чтобы представить полный пример.

0 голосов
/ 30 мая 2016
<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>
0 голосов
/ 14 августа 2010

Добавьте asp:ListBox к ContentTemplate вашего asp:UpdatePanel или добавьте новый 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(); 
}
...