3

背景:我有一个 winForm 应用程序,它根据表单中提供的用户输入在数据库中注册用户,自动为用户生成随机密码和用户名,并通过电子邮件向用户发送一个链接以获取基于应用程序的应用程序选定的营销公司。

问题:我得到了要填充的捆绑列表框,其中自动回发设置为 true,但是一旦您单击 lbcarrier,捆绑列表框就会填充,并且它不允许您选择多个运营商。

您对如何使用回发功能允许多选有任何想法吗?

下面是界面截图: 截屏

default.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>

default.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

感谢您的关注!

4

2 回答 2

3

根据定义,当用户更改列表选择时,该AutoPostBack属性将自动导致回发。

要启用多项选择,您需要AutoPostBack关闭并启用该SelectionMode属性

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

请注意,这AutoPostBackfalse默认设置,所以我只是省略了它。

用户提交后,您可以使用与您在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
于 2011-04-12T14:24:45.360 回答
1

最简单的解决方法是AutoPostBack关闭并SelectionMode按照建议进行更改。然后有一个按钮,Get Bundles。在该单击事件中,您可以添加代码以检索基于运营商列表框的捆绑包。

于 2011-04-12T14:30:04.333 回答