我有一个包含内容表的页面,我需要允许用户选择要处理的行。我已经弄清楚如何在表格中添加一列复选框,但我似乎无法弄清楚如何测试提交表单时是否选中它们。如果它们是静态元素,我就可以检查 dothis.theCheckBox
但它们是通过编程生成的。
另外,我对如何将数据附加到它们(通过将其填充到 ID 属性中)不太满意。
我不确定它是否相关,但我正在考虑一些第 22 条军规,因为我需要知道创建了哪些复选框上次在我可以重新运行创建它们的代码之前进行了检查。
Edit:我已经找到了一个几乎解决方案。通过设置AutoPostBack
财产和CheckedChanged
event:
checkbox.AutoPostBack = false;
checkbox.CheckedChanged += new EventHandler(checkbox_CheckedChanged);
我可以获取在回发时为任何已更改的复选框调用的代码。然而这有两个问题:
- 回调是在之后(或期间,我不确定)处理的
Page_Load
我需要在哪里使用这些信息
- 对于页面加载时已选中且仍然处于选中状态的复选框,不会调用回调。
Edit 2:
我最终做的是用已知前缀标记我的所有 ID,并将其填充在顶部Form_Load
:
foreach (string v in this.Request.Form.AllKeys)
{
if (v.StartsWith(Prefix))
{
var data = v.Substring(Prefix.Length);
}
}
其他一切似乎都已经晚了。
我假设您使用的是 DataList,但这应该与可以模板化的 Control 一起使用。我还假设您正在使用数据绑定。
代码正面:
<asp:DataList ID="List" OnItemDataBound="List_ItemDataBound" runat="server">
<ItemTemplate>
<asp:CheckBox ID="DeleteMe" runat="server"/>
<a href="<%# DataBinder.Eval(Container, "DataItem.Url")%>" target="_blank">
<%# DataBinder.Eval(Container, "DataItem.Title")%></a>
</ItemTemplate>
</asp:DataList>
<asp:Button ID="DeleteListItem" runat="server" OnClick="DeleteListItem_Click" ></asp:Button>
背后代码:
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadList();
}
protected void DeleteListItem_Click(object sender, EventArgs e)
{
foreach (DataListItem li in List.Items)
{
CheckBox delMe = (CheckBox)li.FindControl("DeleteMe");
if (delMe != null && delMe.Checked)
//Do Something
}
}
LoadList();
}
protected void LoadList()
{
DataTable dt = //Something...
List.DataSource = dt;
List.DataBind();
}
protected void List_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
string id = DataBinder.Eval(e.Item.DataItem, "ID").ToString();
CheckBox delMe = (CheckBox)e.Item.FindControl("DeleteMe");
if (delMe != null)
delMe.Attributes.Add("value", id);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)