ASP.NET:
<asp:Panel ID="pnlFilter" runat="server">
<div class="dvFilter">
<input type="checkbox" id="cb01" checked="checked" />
<label for="cb01">All</label>
</div>
<div class="dvFilter">
<input type="checkbox" id="cb02" checked="checked" />
<label for="cb02">None</label>
</div>
</asp:Panel>
C#:
foreach (Control item in this.form1.Controls)
{
System.Web.UI.HtmlControls.HtmlInputCheckBox _cbx = item as System.Web.UI.HtmlControls.HtmlInputCheckBox;
if (_cbx != null)
{
if (_cbx.Checked)
{
//Do something:
Response.Write(_cbx.Name + " was checked.<br />");
}
}
}
我获得了null
变量的_cbx
值。
如何更新它以便我能够获取所有checked
输入类型复选框的ID。
我尝试了这个答案:Count the number of TextBoxes and CheckBoxes in a form但也不适合我。
答案 0 :(得分:2)
如果要使用<input type="checkbox">
,则需要解析DOM。
我建议您使用<asp:CheckBox>
代替<input type="checkbox">
。然后你可以从c#访问你的控件
在您的查找中:
var _cbx = item as System.Web.UI.WebControls.CheckBox;
您可以获取所有复选框,而无需循环遍历所有控件。
使用LINQ:
this.form1.Controls.Where(c=>c.GetType() == typeof(CheckBox))
答案 1 :(得分:1)
我认为问题是你的复选框不能在服务器上运行。因此,它们在代码隐藏中没有“分配”控件。尝试将属性runat =“server”添加到您的复选框。就像你在面板中一样。
答案 2 :(得分:1)
使用此:
foreach (HtmlElement element in webBrowser1.Document.All)
{
System.Web.UI.HtmlControls.HtmlInputCheckBox _cbx = element as System.Web.UI.HtmlControls.HtmlInputCheckBox;
if (_cbx != null)
{
if (_cbx.Checked)
{
//Do something:
Response.Write(_cbx.Name + " was checked.<br />");
}
}
}
答案 3 :(得分:1)
首先,您需要添加runat="server"
或将其更改为asp:CheckBox
控件。
但是如果添加它们,你找不到它们的原因是因为它们处于另一个控制之下。所以在pnlFilter
中查找它们。
<asp:Panel ID="pnlFilter" runat="server">
<div class="dvFilter">
<input type="checkbox" id="cb01" checked="checked" runat="server" />
<label for="cb01">All</label>
</div>
<div class="dvFilter">
<input type="checkbox" id="cb02" checked="checked" runat="server" />
<label for="cb02">None</label>
</div>
</asp:Panel>
背后的代码
foreach (Control item in pnlFilter.Controls)
{
HtmlInputCheckBox _cbx = item as HtmlInputCheckBox;
if (_cbx != null)
{
if (_cbx.Checked)
{
//Do something:
Response.Write(_cbx.Name + " was checked.<br />");
}
}
}
答案 4 :(得分:1)
我认为答案是所有建议更改的组合。 使复选框runat服务器具有可用的服务器端:
<asp:Panel ID="pnlFilter" runat="server">
<div class="dvFilter">
<input type="checkbox" id="cb01" checked="checked" runat="server" />
<label for="cb01">All</label>
</div>
<div class="dvFilter">
<input type="checkbox" id="cb02" checked="checked" runat="server" />
<label for="cb02">None</label>
</div>
</asp:Panel>
正如所建议的那样,对面板的(子)控件进行交互:
foreach (Control item in this.pnlFilter.Controls)
{
System.Web.UI.HtmlControls.HtmlInputCheckBox _cbx = item as System.Web.UI.HtmlControls.HtmlInputCheckBox;
if (_cbx != null)
{
if (_cbx.Checked)
{
//Do something:
Response.Write(_cbx.Name + " was checked.<br />");
}
}
}
或者,如果您将复选框更改为asp:Checkbox
,则类型将为System.Web.UI.WebControls.CheckBox
答案 5 :(得分:1)
我认为通过前端流程访问前端的东西会更好。
例如,收集JQuery所需的已选中复选框ID并将其保存在HiddenField
内,然后通过请求将其返回到后端。
实例
<asp:Panel ID="pnlFilter" runat="server">
<div class="dvFilter">
<input type="checkbox" id="cb01" checked="checked" />
<label for="cb01">All</label>
</div>
<div class="dvFilter">
<input type="checkbox" id="cb02" checked="checked" />
<label for="cb02">None</label>
</div>
<input type="hidden" id="hdfIds" name="hdfIds" />
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" />
JQuery部分(首先链接JQuery&amp; json2 lib)
function recoverCbxStatus() {
if (hdfIds.value) {
var ids = JSON.parse(hdfIds.value);
ids.forEach(function (id) {
$('#' + id).prop('checked', true);
});
}
}
function refreshIds() {
var ids = [];
$('input:checkbox[id^="cb"]:checked').each(function () {
ids.push($(this).attr("id"));
});
hdfIds.value = JSON.stringify(ids);
}
$(document).ready(function () {
recoverCbxStatus();
refreshIds();
});
$('input:checkbox[id^="cb"]').change(function () {
refreshIds();
});
后端(Nuget Json.NET)
protected void Page_Load(object sender, EventArgs e)
{
string idsJson = Request["hdfIds"];
List<string> ids;
if (idsJson != null)
{
ids = JsonConvert.DeserializeObject<List<string>>(idsJson);
Response.Write("count: " + ids.Count);
}
}
答案 6 :(得分:0)
您可以使用GridView。代码方面这样做 -
for (int i = 0; i < **yourGridViewId** .Rows.Count; i++)
{
CheckBox cb = ((CheckBox)**yourGridViewId** .Rows[i].FindControl(" **yourCheckboxId**"));
....
}