我需要做一个项目,要动态在一个表格中添加一些复选按钮和文本(文本是从数据库查到的),客户端选择了复选框然后点击提交按钮后,服务器端怎么才能访问到那些动态添加的复选框的状态。
我把一个类似的示例代码贴在下面,请大家能帮我看看吧,先谢谢了。aspx文件如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 243px; height: 134px" id="TABLE1" runat="server" border="1">
<tr>
<td style="height: 99px" >
</td>
<td style="height: 99px">
</td>
</tr>
</table>
<br />
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" /></div>
</form>
</body>
</html>后台cs文件如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CheckBox chk1 = new CheckBox();
chk1.ID = "ck1";
this.TABLE1.Rows[0].Cells[0].Controls.Add(chk1);
LiteralControl lc1 = new LiteralControl("篮球");
this.TABLE1.Rows[0].Cells[0].Controls.Add(lc1);
CheckBox chk2 = new CheckBox();
chk2.ID = "ck2";
this.TABLE1.Rows[0].Cells[1].Controls.Add(chk2);
LiteralControl lc2 = new LiteralControl("排球");
this.TABLE1.Rows[0].Cells[1].Controls.Add(lc2); }
}
protected void Button1_Click(object sender, EventArgs e)
{
// CheckBox chk = (CheckBox)this.TABLE1.Rows[0].Cells[0].FindControl("ck1"); 这里chk为空,不能取得
CheckBox chk = this.TABLE1.Rows[0].Cells[0].Controls[0] as CheckBox;//chk也为空!
//if (chk.Checked)由于chk为空, 所以不能访问
{
//...
}
}
}
我在点击提交后表格中什么也没有了,我想可能是因为复选框和文本是动态添加的,而且写在if(!IsPostBack){}里面所以在提交后就没有了,但程序的ViewState可以保存回发数据呀,而且默认情况EnableViewState=true,就是说可以保存CheckBox和文本,我一直不明白为何控件提交了就没了。这种情况我该怎么写才能获取复选框?请指教。
我把一个类似的示例代码贴在下面,请大家能帮我看看吧,先谢谢了。aspx文件如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 243px; height: 134px" id="TABLE1" runat="server" border="1">
<tr>
<td style="height: 99px" >
</td>
<td style="height: 99px">
</td>
</tr>
</table>
<br />
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" /></div>
</form>
</body>
</html>后台cs文件如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CheckBox chk1 = new CheckBox();
chk1.ID = "ck1";
this.TABLE1.Rows[0].Cells[0].Controls.Add(chk1);
LiteralControl lc1 = new LiteralControl("篮球");
this.TABLE1.Rows[0].Cells[0].Controls.Add(lc1);
CheckBox chk2 = new CheckBox();
chk2.ID = "ck2";
this.TABLE1.Rows[0].Cells[1].Controls.Add(chk2);
LiteralControl lc2 = new LiteralControl("排球");
this.TABLE1.Rows[0].Cells[1].Controls.Add(lc2); }
}
protected void Button1_Click(object sender, EventArgs e)
{
// CheckBox chk = (CheckBox)this.TABLE1.Rows[0].Cells[0].FindControl("ck1"); 这里chk为空,不能取得
CheckBox chk = this.TABLE1.Rows[0].Cells[0].Controls[0] as CheckBox;//chk也为空!
//if (chk.Checked)由于chk为空, 所以不能访问
{
//...
}
}
}
我在点击提交后表格中什么也没有了,我想可能是因为复选框和文本是动态添加的,而且写在if(!IsPostBack){}里面所以在提交后就没有了,但程序的ViewState可以保存回发数据呀,而且默认情况EnableViewState=true,就是说可以保存CheckBox和文本,我一直不明白为何控件提交了就没了。这种情况我该怎么写才能获取复选框?请指教。
解决方案 »
- 关于带参数的Js函数的问题,请高手赐教
- 存储过程的问题!
- 关于gridview排序的问题
- Asp.Net 组装sql 语句问题
- 还是关于webchart的问题。我就不信这么好的东西没有人用。我出高分求助。如果能解决我出500分。
- 高分急求asp上传文件界面,上传文件的源代码,及以文件存入数据库的源代码,分不够可以再加!!!!!!!
- 关于在DataGrid里放TextBox,和Button问题,求解~~~~~谢谢
- 一页面不同情况接受不同父页面传来的变量值,该如何处理??
- C#.NET中如何将ASCII码的十进制数值转换为相应字符?
- 关于模式窗体的问题!!!
- 如何让Menu控件不自动生成样式啊
- 求项目需求书
你在page_load判断是postback就不添加控件了,因此取不到控件。
<asp:Table runat="server" ID="Tb_Test" BorderWidth="1" Width="243px" Height="134px">
</asp:Table>
<br />
<asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" />
</div>cs:
protected void Page_Load(object sender, EventArgs e)
{
TableRow rowchk = new TableRow();
TableCell cell1 = new TableCell();
TableCell cell2 = new TableCell();
CheckBox chk1 = new CheckBox();
chk1.ID = "ck1";
cell1.Controls.Add(chk1);
LiteralControl lc1 = new LiteralControl("篮球");
cell1.Controls.Add(lc1);
CheckBox chk2 = new CheckBox();
chk2.ID = "ck2";
cell2.Controls.Add(chk2);
LiteralControl lc2 = new LiteralControl("排球");
cell2.Controls.Add(lc2);
rowchk.Controls.Add(cell1);
rowchk.Controls.Add(cell2);
this.Tb_Test.Controls.Add(rowchk);
}
也可
js:直接插入<input id="Checkbox1" type="checkbox" value="篮球" />