0

我在使用 eventhandler textchanged 方法来处理文本框数组时遇到问题。文本框是通过 C# 而不是通过 ASP.NET 生成的。

这是 C# 中的文本框代码:

int i = 1;
foreach(string a in data)
{
    i++;
    TextBox text = new TextBox();
    text.TextChanged += new EventHandler(updateone);
    text.AutoPostBack = true;
    text.ID = Convert.ToString(i);
}

我尝试了 Text.AutoPostBack false 和 true 并且得到了相同的结果。当我更改文本框的文本时,甚至没有触及 updateone 方法。当我更改文本框的文本时,它确实会更新网站,但代码中甚至没有触及 updateone 方法。这是updateone代码:

protected void updateone(object sender, EventArgs e)
{
    TextBox text = (TextBox)sender;
}

我感谢大家的帮助!我只是很困惑为什么这不起作用......而且我必须使用 C# 方法而不是 ASP.NET 方式。

4

3 回答 3

1

您是否尝试过在实例成员中存储对您的 TextBoxes 的引用,以便它们不会被垃圾收集?

就像是:

List<TextBox> textBoxes = ...

//in a loop    
text.ID = Convert.ToString(i);
textBoxes.Add(text);

-- 编辑,根据经验,在您的应用程序中放置尽可能多的日志记录。无论是NLog任何其他日志记录工具,甚至是简单的Console.WriteLine(),查看您的代码实际在做什么都非常有帮助。

于 2013-10-16T16:00:49.323 回答
0

您正在动态创建 ASP.NET 控件。这意味着它们不会在表单的回发时自动重新创建。此外,控件必须在 Page_Init 事件中创建,而不是在 Page_Load 事件中。

所以问题是,您在何时何地创建文本框。确保它们是在 Page_Init 阶段创建的,并且您是在请求和回发中创建它们。

于 2013-10-16T18:45:12.010 回答
0

既然您已经确认您正在发布您的实际代码并且似乎没有得到我想说的内容,那么让我尝试在答案中进行解释。

第一个问题:您的 es 数组TextBox不存在,其他答案已经解决,并且您显然已修复但尚未更新问题中的代码以显示您的修复。

第二个问题:TextBox您创建的 es 不会以任何方式添加到您的表单中。我不确定您如何在不这样做的情况下测试您的事件处理程序。

第三个问题:您的事件处理程序updateone不做任何事情。想象你走进一家杂货店,拿起一个橙子,放回去,然后离开。这就是您的事件处理程序正在做的事情。不要只是实例化一个临时的TextBox然后什么都不做,尝试弹出一个消息框,或者更改窗体上存在的另一个控件的文本。

也许这样的事情会起作用:

List<TextBox> textboxes = new List<TextBox>();
int i=1;
foreach(string a in data) // I assume data is a list or array of strings
{
    // I'm not sure why you iterate over data if you don't use it at all inside the loop...
    ++i;
    TextBox text = new TextBox();
    text.TextChanged += new EventHandler(updateone);
    text.AutoPostBack = true;
    text.ID = Convert.ToString(i);
    // Add the TextBox to form here, not sure what the call is
}
Label info = new Label;
Label.Text = "Hello!";
// Add Label to form here, again not sure what the call is

然后你的事件处理程序:

protected void updateone(object sender, EventArgs e)
{
    info.Text = ((TextBox)sender).Text;
}
于 2013-10-16T17:05:44.233 回答