asp.net中的列表框未获取所选项目

时间:2013-05-02 12:36:41

标签: c# asp.net listbox

我有多个下拉列表&我的网页中的列表框。

我正在尝试从CategoryID列表框中获取lstCatID的列表,我可以使用类别名称填充列表框。

如果我在第一次尝试中记得正确,我的代码工作正常,之后我做了一些更改然后它声明总是得到第一个项目选择x时间

<asp:ListBox ID="lstCatID" runat="server" DataTextField="CategoryName" 
                DataValueField="CategoryID" SelectionMode="Multiple" CssClass="lstListBox">
 </asp:ListBox>



protected void Button1_Click(object sender, EventArgs e)
{
    string CatID = string.Empty;
    foreach (ListItem li in lstCatID.Items)
    {
        if (li.Selected == true)
        {
           // Response.Write();
            CatID += lstCatID.SelectedItem.Value + ",";
        }
    }
    Response.Write(CatID);
}

我不确定出了什么问题我检查过MSDN它显示的方式完全相同。

可能是我做错了。

只需使用firefox添加我就能看到多个选中的值都选择了属性。

<option value="3" selected="selected">One</option>
<option value="2">Two</option>
<option value="29" selected="selected">Three</option>
<option value="25" selected="selected">Four</option>
<option value="22" >Five</option>

在这种情况下,我的输出将是3,3,3

我很感激这方面的帮助

5 个答案:

答案 0 :(得分:8)

我不确定我使用的逻辑有什么问题。

我使用LINQ找到了一个很好的解决方案。

这个单一的陈述很有效。得到了我想要的结果。

string values = String.Join(", ", lstCatID.Items.Cast<ListItem>().Where(i => i.Selected).Select(i => i.Value).ToArray());

结果:3,29,25

答案 1 :(得分:7)

您每次都将其设置为相同的值:

foreach (ListItem li in lstCatID.Items)
{
    if (li.Selected == true)
    {
       // you are always using lstCatID.SelectedItem.Value.
        CatID += lstCatID.SelectedItem.Value + ",";
    }
}

当您确实想要所选循环中项目的值时:

foreach (ListItem li in lstCatID.Items)
{
    if (li.Selected == true)
    {
        // get the value of the item in your loop
        CatID += li.Value + ",";
    }
}

答案 2 :(得分:3)

尝试在Page_Load上添加 Page.IsPostback

protected void Page_Load(object sender, EventArgs e)
{
    // Do your API code here unless you want it to occur only the first
    // time the page loads, in which case put it in the IF statement below.
    if (!Page.IsPostBack)
    {

    }
}

<强>代码:

protected void Button1_Click(object sender, EventArgs e)
{
    string CatID = string.Empty;
    foreach (ListItem li in lstCatID.Items)
    {
        if (li.Selected )
        {
           // TODO: Whatever you are doing with a selected item.
        }
    }
    Response.Write(CatID);
}

一旦我遇到同样的问题而且我犯了Postback错误。

希望它有效。

答案 3 :(得分:2)

使用linq获取所选项目

var selected = lstCatID.Items.Where(i => i.Selected);

答案 4 :(得分:0)

几分钟后我找到了解决方案:

If lstLocations.Items.Count > 0 Then
            For i As Integer = 0 To lstLocations.Items.Count - 1
                If lstLocations.Items(i).Selected Then
                    'insert command
                    Dim selectedItem As String = lstLocations.Items(i).Text
                End If
            Next
        End If

这在我的场景中运作良好