![](/img/trans.png)
[英]Dynamically recreating controls on postback for each row of table (ASP.NET/C#)
[英]ASP.NET C# Dynamically create table with postback button on each row
我正在尝试显示从数据库动态加载的表,并在每行的第一个单元格中使用动态创建的按钮。 每个按钮都分配了 ROW_ID 值,该值在一个“通用”方法处理程序中唯一标识按钮。
据我所知,我能做到的唯一方法是在 Init 生命周期阶段加载数据并显示它和连接按钮到处理程序。 我面临的问题是当这个按钮(例如目的)在数据库中为该特定行调用删除(或其他修改)过程时,我必须执行 Response.End 并重新加载页面以反映此修改,因为在 PostBack 处理程序期间,从 DB 重新获取新数据集并创建一组新按钮并将其连接到处理程序已经太晚了。 然而,整页重新加载会丢失所有控件的状态,这是不可取的。
需要注意的一件事:我正在使用自定义呈现用户控件来显示数据库中的结果集(虽然它看起来像一个表格)。 我没有将 DataGridView 与 DataBinding 一起使用。
可能的解决方案是为每一行使用单选按钮,在底部使用一个静态按钮,但这远非理想。
问题是:有什么更好的方法可以做到这一点? 我错过了什么吗? 我发现很难相信 ASP.NET 处理这个通用用例会如此麻烦。
感谢您提供任何可能的建议。
我最终得到的解决方案是在每行的虚拟按钮上使用基于 JavaScript 的 __doPostBack( 'static_button_id', 'row_id' )。 它生成带有参数的回发,该参数标识发生此回发的行。
Button (ID=static_button_id) 是派生的经典按钮,通过 style="display:none;" 隐藏在页面上并单击调用自定义处理程序(在初始化/加载阶段分配)。 它派生为绕过参数的回发验证。
要在 .NET 处理程序中检索参数 (row_id),我使用: string passedArgument = Request.Params.Get("__EVENTARGUMENT");
它正是我需要的,但它有点脏。 如果有人提供干净的方法来做到这一点,我仍然会很感激。
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.