在回发中获取复选框后面的代码
get code behind checkboxes in postback
我想在 page_load 中的 table 中的每一行的开头添加一些复选框:(我将它们添加到 asp:placeholder)
protected void Page_Load(object sender, EventArgs e)
{
Table dtTable = new Table();
TableHeaderRow dtHeaderRow = new TableHeaderRow();
TableHeaderCell dtHeaderCheckbox = new TableHeaderCell();
dtHeaderCheckbox.Controls.Add(dtHeaderCkBox);
dtHeaderRow.Cells.Add(dtHeaderCheckbox);
foreach (DataColumn col in _ds.Tables[0].Columns)
{
TableHeaderCell dtHeaderCell = new TableHeaderCell();
dtHeaderCell.Text += col.ColumnName;
dtHeaderRow.Cells.Add(dtHeaderCell);
}
dtTable.Rows.Add(dtHeaderRow);
TableRow row;
for (int i = 0; i < _ds.Tables[0].Rows.Count; i++)
{
row = new TableRow();
TableCell dtCell = new TableCell();
CheckBox ckBox = new CheckBox();
ckBox.ID = "chkBox_" + _ds.Tables[0].Rows[i]["IDENTIFIER"].ToString();
ckBox.AutoPostBack = false;
ckBox.EnableViewState = false;
dtCell.Controls.Add(ckBox);
row.Cells.Add(dtCell);
for (int j = 0; j < _ds.Tables[0].Columns.Count; j++)
{
TableCell cell = new TableCell();
cell.Text = _ds.Tables[0].Rows[i][j].ToString();
row.Cells.Add(cell);
}
dtTable.Rows.Add(row);
}
phUnconfirmedDiv.Controls.Add(dtTable);
}
现在的问题是,当用户按下提交按钮(和回发)时,我无法访问我的复选框:
protected void btnAccept_OnClick(object sender, EventArgs e)
{
List<CheckBox> chkList = new List<CheckBox>();
foreach (Control ctl in form1.Controls)
{
if (ctl is CheckBox)
{
if (ctl.ID.IndexOf("chkBox_") == 0)
{
chkList.Add((CheckBox)ctl);
}
}
}
ScriptManager.RegisterStartupScript(this, GetType(), "event", "alert('" + chkList.Count + "');", true);
}
动态生成的控件在呈现在视图上后会丢失其状态。对于您来说,要在您的代码隐藏中再次访问它们,当您回发时,您将必须重新创建它们,然后您将能够操作它们。
就获取复选框的选中值而言,您可以尝试这样的操作。这可能不准确,但应该给出一个想法。
这将是您的复选框:
<input type="checkbox" id="yourId" name="selectedIds" value="someValue"/>
在您的代码隐藏中:
value = Request.Form["selectedIds"];
希望对您有所帮助。
按钮的用户界面控件上的 autopostback 是否设置为 true? ei:
<telerik:RadButton runat="server" ID="rBtnRelease" Text="Release" Width="100px" OnClick="rBtnRelease_Click" AutoPostBack="False"/>
当一个人试图在客户端和服务器端之间来回获取数据时,这通常是常见的错误。
我现在设法解决了这个问题。谢谢大家的提示!
所有选中的复选框都通过回发发送。所以 "easiest" 方法是搜索在回发中发送的所有参数,这些参数以 "chkBox_" 开头,然后将它们保存在 list/array 中。所以我知道我的数据库中应该更新哪些数据:
protected void btnAccept_OnClick(object sender, EventArgs e)
{
List<String> chkList = new List<String>();
// All checked checkboxes are sent via the postback. Save this parameters in a list:
foreach (string s in Request.Params.Keys)
{
if (s.ToString().IndexOf("chkBox_") == 0)
{
chkList.Add(s.ToString());
}
}
我想在 page_load 中的 table 中的每一行的开头添加一些复选框:(我将它们添加到 asp:placeholder)
protected void Page_Load(object sender, EventArgs e)
{
Table dtTable = new Table();
TableHeaderRow dtHeaderRow = new TableHeaderRow();
TableHeaderCell dtHeaderCheckbox = new TableHeaderCell();
dtHeaderCheckbox.Controls.Add(dtHeaderCkBox);
dtHeaderRow.Cells.Add(dtHeaderCheckbox);
foreach (DataColumn col in _ds.Tables[0].Columns)
{
TableHeaderCell dtHeaderCell = new TableHeaderCell();
dtHeaderCell.Text += col.ColumnName;
dtHeaderRow.Cells.Add(dtHeaderCell);
}
dtTable.Rows.Add(dtHeaderRow);
TableRow row;
for (int i = 0; i < _ds.Tables[0].Rows.Count; i++)
{
row = new TableRow();
TableCell dtCell = new TableCell();
CheckBox ckBox = new CheckBox();
ckBox.ID = "chkBox_" + _ds.Tables[0].Rows[i]["IDENTIFIER"].ToString();
ckBox.AutoPostBack = false;
ckBox.EnableViewState = false;
dtCell.Controls.Add(ckBox);
row.Cells.Add(dtCell);
for (int j = 0; j < _ds.Tables[0].Columns.Count; j++)
{
TableCell cell = new TableCell();
cell.Text = _ds.Tables[0].Rows[i][j].ToString();
row.Cells.Add(cell);
}
dtTable.Rows.Add(row);
}
phUnconfirmedDiv.Controls.Add(dtTable);
}
现在的问题是,当用户按下提交按钮(和回发)时,我无法访问我的复选框:
protected void btnAccept_OnClick(object sender, EventArgs e)
{
List<CheckBox> chkList = new List<CheckBox>();
foreach (Control ctl in form1.Controls)
{
if (ctl is CheckBox)
{
if (ctl.ID.IndexOf("chkBox_") == 0)
{
chkList.Add((CheckBox)ctl);
}
}
}
ScriptManager.RegisterStartupScript(this, GetType(), "event", "alert('" + chkList.Count + "');", true);
}
动态生成的控件在呈现在视图上后会丢失其状态。对于您来说,要在您的代码隐藏中再次访问它们,当您回发时,您将必须重新创建它们,然后您将能够操作它们。
就获取复选框的选中值而言,您可以尝试这样的操作。这可能不准确,但应该给出一个想法。
这将是您的复选框:
<input type="checkbox" id="yourId" name="selectedIds" value="someValue"/>
在您的代码隐藏中:
value = Request.Form["selectedIds"];
希望对您有所帮助。
按钮的用户界面控件上的 autopostback 是否设置为 true? ei:
<telerik:RadButton runat="server" ID="rBtnRelease" Text="Release" Width="100px" OnClick="rBtnRelease_Click" AutoPostBack="False"/>
当一个人试图在客户端和服务器端之间来回获取数据时,这通常是常见的错误。
我现在设法解决了这个问题。谢谢大家的提示!
所有选中的复选框都通过回发发送。所以 "easiest" 方法是搜索在回发中发送的所有参数,这些参数以 "chkBox_" 开头,然后将它们保存在 list/array 中。所以我知道我的数据库中应该更新哪些数据:
protected void btnAccept_OnClick(object sender, EventArgs e)
{
List<String> chkList = new List<String>();
// All checked checkboxes are sent via the postback. Save this parameters in a list:
foreach (string s in Request.Params.Keys)
{
if (s.ToString().IndexOf("chkBox_") == 0)
{
chkList.Add(s.ToString());
}
}