动态将TextBoxes插入Repeater并检索其值

如何解决动态将TextBoxes插入Repeater并检索其值

|| 我有一个sql绑定的Repeater,它包含可编辑元素和只读元素的混合物。当您单击行上的“编辑”按钮时,可编辑部分应转换为文本框,而当您单击“更新”时,应保存所做的更改。 这是“编辑”和“更新”按钮的OnClick代码(非常简化的版本):
switch(commandName)
{
    case \"Edit\":
        Label1.Visible = false; //hide read-only version
        PlaceHolder1.Visible = true; //show editing version

        //Dict1 is Dictionary<string,string> in this example.
        foreach (var key in Dict1)
        {
            //insert a TextBox dynamically into the PlaceHolder
            PlaceHolder1.Controls.Add(new TextBox 
            { 
                ID = \"txt\" + key,Text = Dict1[key] 
            });
        }
        break;

    case \"Update\":
        //retrieve user input from dynamically-added TextBoxes
        foreach (var TextBox1 in PlaceHolder1.Controls.Where(c => c.ID.StartsWith(\"txt\")))
        {
            doStuff(TextBox1);
        }

        Label1.Visible = true; //show read-only version
        PlaceHolder1.Visible = false; //hide editing version
        break;
}
问题是当页面回发时,我的动态添加的文本框不存在。我已经在调试器中检查了“ 1”,并且其中没有TextBoxes。
PlaceHolder1
本身在Repeater内,但是我没有在PostBack上重新绑定Repeater。 我已经考虑过使用原始HTML代替TextBox控件,并将值从Request.Form中拉出来,但是这对我来说有点强。如何使动态添加的TextBox跨回发持久化? 编辑: 这里有一些复杂之处,如果没有大量示例代码就很难显示出来。这里是大的: 中继器中的每个单元格可以包含只读文本和可编辑文本(即,动态插入的Labels和TextBoxes)的混合物 我不知道每个单元格中将有多少个可编辑区域。原始文本可能看起来像
blah blah @A1@ blah blah @A2@ blah...
,我将不得不插入替换文本来代替@ A1 @,@ A2 @等。在编辑模式下,仅该替换文本是可编辑的。     

解决方法

动态添加控件时,不会在回发之间保留它们。回发后,您必须将它们再次添加到页面中。我通常在Page_Load中执行此操作。然后,一旦添加它们,它们的回发状态将在ASP.NET页生命周期的稍后阶段正确还原。 所以, 每次加载页面时都必须添加动态控件, 但是一旦添加它们,ASP.NET即可正确还原其状态。 希望这可以帮助!     ,一种可能的答案是在ITEM TEMPLATE中预定义TEXTBOX,然后在click事件中为给定的行设置其可见性。 第二种可能性是重构转发器以改用GRIDVIEW控件。它支持开箱即用的可编辑模板。 无论如何,正在发生的事情是,由于这些控件是动态添加的,因此不会在下一次回发中重新创建它们。在回发中,如果要访问它们,则需要重新创建控件。但是,不要忘记该值存储在表单集合中:
myval =  request.form[\"txt\" + key];
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?