C# 在asp listview对象中标识选定的复选框
我一直试图理解ASP中的ListView对象,但无法通过编程方式获取所选复选框或对其进行迭代。下面是我在这里看到最多的两种方法,但到目前为止,我尝试过的所有方法似乎都不适合我 任何帮助都将不胜感激 .ASPX页 .CS代码隐藏C# 在asp listview对象中标识选定的复选框,c#,asp.net,C#,Asp.net,我一直试图理解ASP中的ListView对象,但无法通过编程方式获取所选复选框或对其进行迭代。下面是我在这里看到最多的两种方法,但到目前为止,我尝试过的所有方法似乎都不适合我 任何帮助都将不胜感激 .ASPX页 .CS代码隐藏 我不在VisualStudio附近,但从我的头脑中我看到了它不迭代的两个原因。 1.应将此ListView绑定到OnLoad方法中的源: 二,。控件不包含复选框类型的项,因此OfType会过滤掉所有元素。如果调试并在courseListView.Controls.OfTy
我不在VisualStudio附近,但从我的头脑中我看到了它不迭代的两个原因。 1.应将此ListView绑定到OnLoad方法中的源: 二,。控件不包含复选框类型的项,因此OfType会过滤掉所有元素。如果调试并在courseListView.Controls.OfType中的foreach复选框ctrl上放置断点,您将看到该复选框是courseListView的子项之一。因此,根据包含复选框的控件构建逻辑,编写相应的逻辑,如下所示:
var checkBox = courseListView.Controls.Cast<Control>().First().FindControl("courseIdchk");
更新2
ASPX:
代码隐藏:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
courseListView.DataSource = GetCourses();
courseListView.DataBind();
}
else
{
var result = string.Empty;
var findCheckedQuery = courseListView
.Controls
.Cast<Control>()
.Select(x => (CheckBox)x.FindControl("chkBox"))
.Where(x => x.Checked)
.Select(x => x.Text);
result = string.Join(", ", findCheckedQuery.ToArray());
}
}
它是在foreach中的复选框中迭代,但没有得到它们的文本,或者甚至没有这样做?它似乎甚至没有在foreach中迭代。我在循环中放了一个简单的计数器,它返回为零。谢谢你的观察。我确实绑定了数据源,但没有包含该语句。很抱歉让我尝试一下您关于执行调试和单步执行代码的建议,看看是否可以找到复选框所处的适当级别。谢谢。是的,像这样的东西!但这并不安全,在布局上做了一些小的改变——你会得到一个IndexOutOfRangeException:好的,下面找到了第一个复选框,所以我至少知道了子项的位置。我显然可以为我建立nexted。。。和foreach循环,但对于这样一个简单的请求,这似乎有点过分。我错过了什么?foreach复选框courseListView.Controls[0]。Controls[1]。Controls.of类型{i++;如果ctrl.Checked result+=:+ctrl.Text;},请详细说明如何将这些复选框设置为true,我想,按用户和以下表单重新加载?listView最初在Page_Load事件中填充,但在isPostBack下除外。用户应该选择任意数量的所选复选框,提交,然后我的代码将根据所选值继续处理。
if (!IsPostback) {
courseListView.DataSource = GetCourses();
courseListView.DataBind();
}
var checkBox = courseListView.Controls.Cast<Control>().First().FindControl("courseIdchk");
var findCheckedQuery = courseListView.Controls[0]
.Controls
.Cast<Control>()
.Select(ctrl => ctrl.FindControl("chkBox") as CheckBox)
.Where(chk => chk != null && chk.Checked);
result = string.Join(":", findCheckedQuery.Select(x => x.Text).ToArray());
<asp:Repeater ID="courseListView" runat="server">
<ItemTemplate>
<asp:CheckBox ID="chkBox" data-id="<%#((Course)Container.DataItem).CourseId %>" Text="<%#((Course)Container.DataItem).Title %>" runat="server" />
<br/>
</ItemTemplate>
</asp:Repeater>
<asp:Button runat="server" UseSubmitBehavior="True" Text="Submit"/>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
courseListView.DataSource = GetCourses();
courseListView.DataBind();
}
else
{
var result = string.Empty;
var findCheckedQuery = courseListView
.Controls
.Cast<Control>()
.Select(x => (CheckBox)x.FindControl("chkBox"))
.Where(x => x.Checked)
.Select(x => x.Text);
result = string.Join(", ", findCheckedQuery.ToArray());
}
}