我在以编程方式添加一些复选框和事件处理程序时遇到了一些问题。复选框都显示正常,但点击时它们不会执行任何操作。有谁知道我做错了什么?
foreach (Statement i in theseStatements)
{
box = new CheckBox();
box.Text = i.StatementText;
box.AutoPostBack = true;
box.CheckedChanged += new EventHandler(this.CheckedChange);
PlaceHolder.Controls.Add(box);
}
protected void CheckedChange(object sender, EventArgs e)
{
CheckBox x = (CheckBox)sender;
Instructions.Text = "change";
WorkPlaceHazardsBox.Text += x.Text;
}
答案 0 :(得分:3)
您应该执行以下操作:
ID
循环中创建的CheckBox
的每个实例设置foreach
属性。CheckedChanged
事件处理程序答案 1 :(得分:2)
请务必确认您正在执行以下操作:
如果您尝试做的不同,请向我们提供更多信息。
答案 2 :(得分:0)
如果每个复选框都有一个说明文本框和一个WorkPlaceHazards文本框,则必须有一种方法可以将单击的复选框与其他两个控件相关联。
如果情况并非如此,那么他们应该做什么呢?
答案 3 :(得分:0)
当你说他们“什么都不做”时 - 你得到了回复吗?
如果您必须为复选框分配ID,我不会感到惊讶 - 请记住,在回发时,您将获得一个新页面,因此它必须重新创建所有复选框,然后找出哪个一个被检查等。这是进入什么(对我来说,无论如何)有点黑魔法的一面ASP.NET。我认为你必须仔细研究页面生命周期并控制识别方面。
答案 4 :(得分:0)
在运行时插入控件时,可以通过Request [“controlname”]方法获取值。您必须为每个控件设置唯一ID。
但是,您可以使用CheckBoxList替代动态添加复选框
答案 5 :(得分:0)
我将您的代码复制到一个新的VS2005 C#Web项目中(见下文)。你的代码有效。此代码段之外可能还有其他内容。或者,所有语句集合中的StatementText属性是否始终为空?
页面...
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
Instructions: <asp:TextBox ID="Instructions" runat="server" />
WorkPlaceHazardsBox: <asp:TextBox ID="WorkPlaceHazardsBox" runat="server" />
</div>
</form>
</body>
代码背后......
using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
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;
namespace CheckboxMadness
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<string> statements = new List<string>(new string[] { "foo", "bar" });
foreach (string i in statements)
{
CheckBox box = new CheckBox();
box.Text = i;
box.AutoPostBack = true;
box.CheckedChanged += new EventHandler(this.CheckedChange);
PlaceHolder1.Controls.Add(box);
}
}
protected void CheckedChange(object sender, EventArgs e)
{
CheckBox x = (CheckBox)sender;
Instructions.Text = "change";
WorkPlaceHazardsBox.Text += x.Text;
}
}
}
答案 6 :(得分:0)
CheckedChanged
可能无效,例如嵌入在TableCell
中。在创建外部控件之前尝试创建CheckBox
并添加CheckedChanged
(例如,如果表格的单元格中嵌入CheckBox
,则表格为外部控件)。
在某些情况下,它可以解决问题。
答案 7 :(得分:-1)
var box = new CheckBox();