我有多个下拉列表&我的网页中的列表框。
我正在尝试从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
我很感激这方面的帮助
答案 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
这在我的场景中运作良好