3

Web ページに複数のドロップダウンとリストボックスがあります。

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

この点で助けていただければ幸いです

4

5 に答える 5

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 + ",";
    }
}
于 2013-05-02T13:11:51.430 に答える
4

Page.IsPostbackを Page_Load のように追加してみてください

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);
}

同じ問題に直面していたら、ポストバックの間違いを犯しました。

それがうまくいくことを願っています。

于 2013-05-02T12:41:50.663 に答える
2

linq を使用して選択したアイテムを取得する

var selected = lstCatID.Items.Where(i => i.Selected);
于 2013-09-23T08:58:45.080 に答える
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

これは私のシナリオではうまくいきました

于 2016-08-19T14:53:10.433 に答える