ASP.NET w / VB.NET - MultiSelect on ListBox или CheckBoxList w / AutoPostback включен - PullRequest
2 голосов
/ 12 апреля 2011

Справочная информация: у меня есть приложение winForm, которое регистрирует пользователя в базе данных на основе введенного пользователем в форму ввода, автоматически генерирует случайный пароль и имя пользователя для пользователя и отправляет пользователю по электронной почте ссылку для приложение на основе выбранной маркетинговой компании.

Проблема: Я получил список пакетов для заполнения с autopostback, установленный в значение true, но список пакетов заполняется, как только вы нажимаете на lbcarrier, и он не позволяет вам выбрать более одного носителя.

Есть ли у вас какие-либо идеи о том, как разрешить множественный выбор с включенной функцией обратной передачи?

Вот скриншот интерфейса: screenshot

код по умолчанию.aspx:

        <td class="style1">
            Carriers:</td>
        <td bgcolor="#ffffff" class="style2">
            <asp:ListBox AutoPostback="true" ID="lbCarriers" runat="server" Height="86px" Width="250px">
            </asp:ListBox>
                </td>
            </tr>

        <td class="style1">
            Bundles:</td>
        <td bgcolor="#ffffff" class="style2">
            <asp:ListBox ID="bundles" runat="server" Height="86px" Width="250px">
            </asp:ListBox>
                </td>
            </tr>

код по умолчанию.aspx.vb:

Protected Sub lbCarriers_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles lbCarriers.SelectedIndexChanged

    Dim splt() As String
    Dim ac1 As Array
    bundles.Items.Clear()
    Dim item As ListItem = lbCarriers.SelectedItem
    splt = item.ToString().Split("|")
    ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0)))
    For Each Pitem In ac1
        bundles.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName)
    Next
End Sub

Спасибо за внимание!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

По определению AutoPostBack свойство автоматически вызывает обратную передачу, когда пользователь изменяет выбор списка.

Чтобы включить множественный выбор, вам нужно повернуть AutoPostBackВыключите и включите свойство SelectionMode :

<asp:ListBox SelectionMode="Multiple" ID="lbCarriers" runat="server"
    Height="86px" Width="250px">

Обратите внимание, что AutoPostBack по умолчанию false, поэтому я просто его опустил.подтверждает, что вы можете обрабатывать выбранные элементы списка с помощью логики, аналогичной той, которая используется в событии lbCarriers_SelectedIndexChanged.Затем вы можете просмотреть элементы и просмотреть свойство Selected элемента или просмотреть результаты метода GetSelectedIndices и ссылаться на элементы по их индексам.

Если это не тот маршрут, по которому вы хотите идти, и вы хотите, чтобы он обрабатывался на лету без обратной передачи, тогда вам нужно написать немного JavaScript.

РЕДАКТИРОВАТЬ: код для просмотра выбранных элементов будет аналогичен приведенному ниже коду, и вы, вероятно, поместите его в метод, который вызывается обработчиком события представленной кнопки.

bundles.Items.Clear()
For Each item As ListItem In lbCarriers.Items
    If item.Selected Then
        Dim splt() As String
        Dim ac1 As Array
        splt = item.ToString().Split("|")
        ac1 = proxy.GetContractingBundles("test", "test", Trim(splt(0)))
        For Each Pitem In ac1
            bundles.Items.Add(Trim(splt(2)) & " | " & Pitem.FormBundleName)
        Next
    End If
Next
1 голос
/ 12 апреля 2011

Самым простым решением было бы отключить AutoPostBack и изменить SelectionMode в соответствии с предложением.Тогда есть кнопка, Get Bundles.В этом событии клика вы можете добавить свой код для извлечения пакетов на основе списка Carrier.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...