作者:心灵de倾斜 | 来源:互联网 | 2023-06-04 20:41
我需要做一个项目,要动态在一个表格中添加一些复选按钮和文本(文本是从数据库查到的),客户端选择了复选框然后点击提交按钮后,服务器端怎么才能访问到那些动态添加的复选框的状态。我把一个类似的示例代码贴
我需要做一个项目,要动态在一个表格中添加一些复选按钮和文本(文本是从数据库查到的),客户端选择了复选框然后点击提交按钮后,服务器端怎么才能访问到那些动态添加的复选框的状态。
我把一个类似的示例代码贴在下面,请大家能帮我看看吧,先谢谢了。
aspx文件如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
后台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和文本,我一直不明白为何控件提交了就没了。这种情况我该怎么写才能获取复选框?请指教。
17 个解决方案
去掉if (!IsPostBack)
点击按钮后,会进行postback,进page_load再进Button1_Click
你在page_load判断是postback就不添加控件了,因此取不到控件。
去掉if (!IsPostBack) 好像不行,因为复选框控件再次加载会造成该控件的选择状态不被保存。
你先理解下 Asp.net页面的生命周期 运行的流程
建议你用JS动态添加吧,ASP.NET的框架是以事件驱动,对于这个设计来说特别麻烦,会有更高的效率,灵活些
篮球、排球?
你可以在IDE上拖入一个DataList控件,然后编辑模板并拖入CheckBox控件,并且设置好数据源。
如果不了解如何使用asp.net2.0开发数据驱动程序,可以参看
Scott Mitchell的教程中的这一篇。这一篇中他使用ObjectDataSource来读取数据库,你可以改为任意一种产生数据记录的方法(例如手动追加记录)。总之,你手写的代码太多了。手写代码很多,不能证明开发技术的高低,设计产品非常棒的人往往只写不足1/5的代码就完成了程序创意。
可以把要保存到asp:HiddenField或者html的hidden(注意加上runat='server')