【发布时间】:2013-02-09 13:32:49
【问题描述】:
我正在用 ASP.NET 和 c# 开发一个应用程序。我的页面中有一个网格视图。我有一个 Listbox 控件,默认情况下 Enabled 属性由 false 设置。我正在尝试从 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 + "')");
}
}
使用上面的代码,我可以启用/禁用 Listbox 控件。但是当我启用控件并选择多个项目并提交表单时,我无法找到列表框的选定项目。
如何获取列表框的选定项?或者有没有其他方法可以启用 - 禁用列表框控件并在 c# 代码中获取所选项目?
【问题讨论】:
-
我的猜测是 ASP.NET 会忽略它,因为它已被禁用。在客户端更改它可能为时已晚,因为框架已经决定将其从视图状态中分离出来。如果您不在控件标记中禁用它,而是在文档呈现时立即在 JavaScript 中禁用它,会发生什么情况?然后根据需要在 JavaScript 中继续启用/禁用。从服务器的角度来看,它会“期望”它被启用并像其他控件一样跟踪它。
-
@David 你能用一些代码解释一下吗?如果我必须在页面加载时这样做,我没有问题。我的目标是启用 - 禁用该控件。
标签: c# javascript jquery asp.net listbox