在另一个网络表单中填写清单

Populate checklist in another webform

我有多项选择的核对表,现在用户将在按下预览按钮后在另一个网络表单中预览表单这里的问题是,核对表未填充在具有所有选择且仅选择项目的其他表单中

在第一种形式中,我编写了以下代码:

Dim Fruit as String = ChkFruit.SelectedValue

Redirect.response(home.aspx?"fruit=" + Fruit)

在第二种形式中,我编写了以下代码:

ChkFruit1.Selectedvalue = QueryString("Fruit")

好吧,在您发布的示例代码中,如果我们只传递一个选定的值,那么您拥有的是一个好的开始。

但是,非常新的大问题是现在我们允许在复选框列表中进行“许多”选择。所以有了一个新的巨大的不同类型的问题?

那么我们将因此需要一个非常不同的解决方案。这里的新大问题是如何传递 1 个值或 15 个选择?当然,如前所述,这是一个相当困难的问题和挑战。

为了传递一大堆可能选择的“列表”或“数组”,那么我建议我们不要使用 URL 参数(在 URL 中查询参数)。

所以,我们在这里需要的是从复选框列表中建立一些选择“列表”,并将其传递到第二页。现在有更多的方法可以做到这一点,然后有冰淇淋的口味,我们有很多选择。

但是,我建议创建一个选择列表,然后我们将其传递给我们跳转到的第二页。

因此,第一页中的标记和按钮可以如下所示:

        <asp:CheckBoxList ID="CheckBoxList1" runat="server">
            <asp:ListItem>Apple</asp:ListItem>
            <asp:ListItem>Grapes</asp:ListItem>
            <asp:ListItem>Bananna</asp:ListItem>
            <asp:ListItem>Cherry</asp:ListItem>
        </asp:CheckBoxList>
        <br />
        <br />
        <asp:Button ID="Button2" runat="server" Text="Submit" Width="158px" />

好的,上面很不错 - 不复杂。

现在,我们的按钮代码?我们需要建立,get/grab/obtain 选定值的列表 - 这就是我们将传递到第二页的内容。

所以,上面看起来像这样:

所以,现在我们的 button/submit 代码在此网页上:

Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim MyCheckList As List(Of String) = New List(Of String)

    For Each MyItem As ListItem In CheckBoxList1.Items
        If MyItem.Selected Then
            MyCheckList.Add(MyItem.Value)
        End If
    Next

    Session("MyCheckList") = MyCheckList
    Response.Redirect("Test2.aspx")

End Sub

所以,代替“url messay parmaters”?

我们创建一个List类型的变量(它们有点像array()

然后我们将所有选定的项目添加到该新列表

然后我们stuff/place将新列表放入Session()

然后我们跳转到第二个网页 Reponse.Redirect

好的,现在,在目标网页上,我们必须获取我们传递的那个列表。

现在,在第 2 页,代码只需要该列表。

但是,假设我们在第 2 页上有相同的复选框列表 - 我们想要填写 - show/display/have 复选框列表显示相同的选项。

这里重要的是我们如何自由使用我们传递给第二页的“列表”。我可以用那个漂亮的列表做任何事情,但我们有这个:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then

        Dim MyCheckList As List(Of String) = Session("MyCheckList")

        ' display the list of passed check box values

        For Each MySelected As String In MyCheckList
            Debug.Print(MySelected)
        Next

        ' or say fill out a check box list we have on this new page - 


        ' process EACH check box list item
        ' check if in our list - if yes, then check box/select it

        For Each MyItem As ListItem In CheckBoxList1.Items
            MyItem.Selected = MyCheckList.Contains(MyItem.Value)
        Next

    End If

End Sub

因此,在第 2 页中,我们演示了两个示例。

代码示例的第一部分 - 仅显示先前选择的列表。因此,您现在可以自由地为每个循环处理选择的复选框列表。

代码示例的第二部分。我们实际上采用该列表并选中我们在第二个目标页面上拥有的全新复选框列表。现在,我怀疑第二个页面上的复选框列表是否相同和重复,但此代码示例显示了我们如何在第二个新目标页面上“再次”显示复选框列表。

并且该代码还演示了如何 loop/process 选择列表,这实际上是该示例代码中最有价值的部分

所以,在我们的第二页中,如果我们有这个标记:

     <asp:CheckBoxList ID="CheckBoxList1" runat="server">
            <asp:ListItem>Apple</asp:ListItem>
            <asp:ListItem>Grapes</asp:ListItem>
            <asp:ListItem>Bananna</asp:ListItem>
            <asp:ListItem>Cherry</asp:ListItem>
        </asp:CheckBoxList>
        <br />            

然后我们会看到这个:

所以当您有更多的值时,只有一个值可以传递到下一页?

然后您可以使用 session() 代替凌乱且难以使用的 URL“parmaters”。那些 URL 参数对于传递“许多”值并不是很好,就像这个新问题所需要的那样。

如果我们只传递一个值和一个选择,那么 URL 参数就可以使用了。但是现在,由于我们需要传递“许多”值,因此使用 session() 将该信息传递到第二个目标页面会大大减少您的工作和努力。