【问题标题】:CheckBoxList ListItem is saving the wrong valuesCheckBoxList ListItem 正在保存错误的值
【发布时间】:2021-11-18 00:39:45
【问题描述】:

在 HTML 中,当我提交表单并突破它时,我有四个复选框。我看到被捕获的价值是“Spin In Barrett”。当我尝试重新打开该条目时,它会崩溃,因为它与选择不同。我在此表单中的所有复选框都有相同的问题。

<div class="form-group row">
    <div class="col-md-12 col-md-offset-1" style="text-align: left; vertical-align: bottom; margin-top: 10px;">
        <label for="chkPreFin" style="text-decoration: underline; font-size: larger;">Pre-Finishing:</label>
        <asp:CheckBoxList ID="chkPrefin" RepeatDirection="Vertical" runat="server" TextAlign="right">
            <asp:ListItem Value="Special Handling Instructions">&nbsp;&nbsp;&nbsp;Special Handling Instructions</asp:ListItem>
            <asp:ListItem Value="Spin In Barrett">&nbsp;&nbsp;&nbsp;Spin In Barrett </asp:ListItem>
            <asp:ListItem Value="Pre-Clean In GreyMills">&nbsp;&nbsp;&nbsp;Pre-Clean In GreyMills</asp:ListItem>
            <asp:ListItem Value="Separate In Mckenzi">&nbsp;&nbsp;&nbsp;Separate In Mckenzi</asp:ListItem>
            <asp:ListItem Value="Spin Dry In Holland (No Heat)">&nbsp;&nbsp;&nbsp;Spin Dry In Holland (No Heat)</asp:ListItem>
        </asp:CheckBoxList>
    </div>
</div>

后面的代码:

For iIndex As Integer = 0 To 4
    If chkPrefin.Items(iIndex).Selected Then
        Prefin += chkPrefin.Items(iIndex).Value.ToString() + "|"
    End If
Next

【问题讨论】:

  • 我会补充一点,它目前位于与我的代码不同的位置...谢谢
  • 不相关,我在本站编辑的时候把它剪掉了。抱歉第一次使用堆栈...
  • 我得到的结果是    Spin In Barrett 而不是 Spin Barrett,这正是我想要的
  • 感谢确认,现在代码正确了,我会删除这些cmets
  • 那么如果你在运行时评估ValueText 他们都是" Spin In Barrett"吗?

标签: asp.net vb.net


【解决方案1】:

您可以迭代整个集合,而不是像使用 for 循环那样限制它?

For Each i As ListItem In chkPrefin.Items
    If i.Selected Then
        Prefin &= i.Value.ToString() & "|"
    End If
Next

另外,请仔细检查您没有引用Text 属性,并且可能在上述代码块之前将字符串设置为空字符串。 Prefin = ""

【讨论】:

  • 行得通,非常感谢...
  • 没问题,如果有帮助,请标记。
  • 虽然迭代For Each 是最好的,如果所有项目都被寻找,它不是解决方案。当然,Text 正在被读取。
  • 我同意,posted 背后的代码没有引用文本,但它必须在某处被引用。
  • 字符串的&amp;=&amp; 怎么样?
【解决方案2】:

好的,有几件事:

您当然可以同时使用“值”和“文本”。

如果值来自数据库,这很常见(您可能有 PK id,然后是文本)。

接下来,因为 Value 和 Text 都是一样的?

然后让我们转储 Value 的使用。

但是,那么我们必须修复文本的缩进。

试试这个:

                <style> 
                    .lSpace Label {margin-left:15px}
                </style>

                <asp:CheckBoxList ID="chkPrefin" RepeatDirection="Vertical" 
                    runat="server" 
                     cssClass="lSpace">
                    <asp:ListItem >Special Handling Instructions</asp:ListItem>
                    <asp:ListItem >Spin In Barrett </asp:ListItem>
                    <asp:ListItem >Pre-Clean In GreyMills</asp:ListItem>
                    <asp:ListItem >Separate In Mckenzi</asp:ListItem>
                    <asp:ListItem >Spin Dry In Holland (No Heat)</asp:ListItem>
                </asp:CheckBoxList>

                <br />
                <asp:Button ID="Button1" runat="server" Text="Show selections"/>

所以,请注意我们是如何添加那个小样式表的 - 那些列表项被呈现为标签,所以我们现在可以缩进全部,没有你有的凌乱的“空格”。

所以对样式进行一次更改 - 你可以缩进整个文本 (我有 15px,但你想玩就玩。

以及上面建议的代码(是的 - 非常好)。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    For Each MySel As ListItem In chkPrefin.Items
        If MySel.Selected Then
            ' Debug.Print("Value of selection = " & MySel.Value) not used
            Debug.Print("Text of selection = " & MySel.Text)
        End If
    Next

End Sub

(请注意我如何注释掉代码的 Value 行 - 我们不需要它(因为两者是相同的 - 但请保持上面的方便 - 因为你可能想要两者。

所以,我们有这个:

输出:

Text of selection = Separate In Mckenzi
Text of selection = Spin Dry In Holland (No Heat)

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多