前台代码:
<ul style="list-style:none; width:1028px; height:auto; overflow:visible;" id="UL1" runat="server"> </ul>
后台代码://从表中读取数据并显示为CheckBox,页面可正常显示出所有CheckBox
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { CheckBox cb = null; var cbList=(from t in dt.AsEnumerable() where t["BoxCategory"].ToString() == pm.Category.ToString() select t); foreach (var s in cbList) { UL1.Controls.Add(new LiteralControl("<li>")); cb = new CheckBox(); cb.Text = s["BoxName"].ToString(); cb.ID = "CheckBox" + s["BoxID"].ToString(); UL1.Controls.Add(cb); UL1.Controls.Add(new LiteralControl("</li>")); } } }
Button代码:
string s = string.Empty; CheckBox cb = null; foreach (Control ct in UL1.Controls) { if (ct.GetType().ToString().Equals("System.Web.UI.WebControls.CheckBox")) { cb = (CheckBox)ct; if (cb.Checked == true) { s += cb.ID.Substring(8, cb.ID.Length - 8) + ","; } } }
s获不到值,怎么办?
问题锁定在Button单击后回发得不到动态增加的按钮,如果是手动在前台放的按钮,s正常可以取到值。
1.不要告诉我在点击button之前,没有CheckBox被选中.... 或者
2.看下ct.GetType()内容是否跟你后面一致? 也可以用 ct is CheckBox来判断,后面用cb = ct as CheckBox, 不过后面要判断cb是否为null,否则抛异常
3.在动态添加CheckBox的时候,给CheckBox添加属性 ranat="server"(用cb.Attribute())
好久没做B/S了,有点生疏了。试试吧.