我正在開發ASP.NET & c#中的應用程序。我在我的頁面中有一個網格視圖。在這我有一個列表框控制和默認啓用屬性設置虛假。我試圖啓用&禁用該控件從javascript/jQuery對複選框控制。如何獲取Listbox控件的選定項目?
我的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 + "')");
}
}
使用上面的代碼我能夠啓用/禁用列表框控件。但是,當我啓用控件並選擇多個項目並提交表單時,我無法找到列表框的選定項目。
如何獲取選定的Listbox項目?或者是否有任何其他方式來啓用 - 禁用列表框控件,並獲取在C#代碼中選擇的項目?
我的猜測是ASP.NET會忽略它,因爲它被禁用了。在客戶端更改它可能爲時已晚,因爲框架已經決定將它從視圖狀態中分離。如果不禁用它,會發生什麼控件標記,而是在d時立即在JavaScript中禁用它禮物呈現?然後在JavaScript中根據需要繼續啓用/禁用。從服務器的角度來看,它會「期待」它被啓用,並會像其他控件一樣跟蹤它。 – David 2013-02-09 13:37:31
@David你能解釋一些代碼嗎?如果我必須在頁面加載時執行此操作,則不存在任何問題。我的目標是啓用 - 禁用該控件。 – 2013-02-09 13:39:18