簡體   English   中英

如何獲取列表框控件的選定項?

[英]How to get selected items of Listbox control?

我正在用ASP.NET和c#開發應用程序。 我的頁面上有一個網格視圖。 在那我有一個列表框控件,默認情況下, false設置為Enabled屬性。 我正在嘗試通過Checkbox控件上的javascript / jQuery啟用和禁用該控件。

我的ASP代碼:

<asp:GridView ID="gvWhom" runat="server" AutoGenerateColumns="False" DataSourceID="odsWhom"
GridLines="None" Width="100%" OnRowDataBound="gvWhom_RowDataBound">
<Columns>
<asp:TemplateField>
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
    <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr style="height: 25px;">
        <td width="20%">
            <asp:CheckBox ID="chkCriteria" runat="server" Text='<%#Eval("TargetType") %>' />
        </td>
        <td width="80%">
            <asp:ListBox ID="lbCriteria" runat="server" CssClass="ddl" Width="150px" Height="50px"
            Enabled="false" SelectionMode="Multiple"></asp:ListBox>
        </td>
    </table>
    </ItemTemplate>
    <HeaderStyle Height="2px" />
</asp:TemplateField>
</Columns>
</asp:GridView>

JavaScript代碼:

function disableDropDown(chkCriteria, lbCriteria) {
    if (document.getElementById(chkCriteria).checked) {         
     document.getElementById(lbCriteria).removeAttribute('disabled');
    }else{
     document.getElementById(lbCriteria).value = -1;
     document.getElementById(lbCriteria).disabled = true;
    }
    return true;
}

C#代碼:

protected void gvWhom_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
    ListBox lbCriteria = (ListBox)e.Row.FindControl("lbCriteria");
    CheckBox chkCriteria = (CheckBox)e.Row.FindControl("chkCriteria");
    chkCriteria.Attributes.Add("onchange", "javascript:return disableDropDown('" + chkCriteria.ClientID + "', '" + lbCriteria.ClientID + "')");
    }
}

使用上面的代碼,我能夠啟用/禁用列表框控件。 但是,當我啟用控件並選擇多個項目並提交表單時,我無法找到列表框的選定項目

如何獲取列表框的選定項目? 或還有其他啟用方法-禁用列表框控件並以c#代碼獲取所選項目嗎?

這主要是一個猜測,但是值得一試...

您在此處禁用服務器端的控件:

<asp:ListBox ID="lbCriteria" runat="server" CssClass="ddl" Width="150px" Height="50px"
        Enabled="false" SelectionMode="Multiple"></asp:ListBox>

Enabled="false"可能向ASP.NET指示它不需要跟蹤此控件,不會對其進行更改。 可能就是為什么在您將其回發到服務器時沒有將數據取回的原因。

讓我們嘗試從服務器(ASP.NET)的角度使控件保持啟用狀態,並完全在客戶端(JavaScript)的UI中保持啟用/禁用狀態。 從本質上消除了ASP.NET的內置框架,可以為您做出有關跟蹤哪些數據的決策。

首先啟用服務器端控件標記中的控件:

<asp:ListBox ID="lbCriteria" runat="server" CssClass="ddl" Width="150px" Height="50px"
        SelectionMode="Multiple"></asp:ListBox>

其余的由JavaScript處理。 您已經有一些JavaScript代碼,您說可以為您啟用/禁用客戶端上的控件,對嗎? 因此,您現在要做的就是在頁面首次加載到瀏覽器中時,為控件的每個實例調用相同的JavaScript以禁用客戶端控件。 這是您想要的部分:

document.getElementById(lbCriteria).value = -1;
document.getElementById(lbCriteria).disabled = true;

現在,您似乎正在從服務器端代碼綁定JavaScript事件,在這方面我將無能為力,因為該方法對我而言不是特別直觀。 (它將JavaScript和C#混合在一起,感覺有點倒退。)因此,我不完全確定您會采用哪種方法。

本質上,您希望為控件的每個實例調用這兩行JavaScript,並且希望它在頁面加載到瀏覽器中后立即發生。

在jQuery中,我會執行以下操作:

$(function () {
    $('select.ddl').attr('disabled', 'disabled');
});

這將在加載DOM時運行,並將為ddl類的每個select添加disabled屬性(值為"disabled"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM