- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我递归遍历页面的控件,GridView 中的 LinkButton 将不再触发 RowCommand 事件。事实上,看起来 GridView 的 ViewState 丢失了。为什么?我该如何解决这个问题?
在您取消注释 //recurse(this.Controls)
之前,下面的代码可以正常工作线。然后,当您点击链接时,GridView 消失并且 RowCommand 永远不会被触发。
完整 <body>
我的页面:
<form id="form1" runat="server">
<asp:GridView ID="gv" AutoGenerateColumns="False" runat="server" onrowcommand="gv_RowCommand">
<Columns><asp:TemplateField HeaderText="Link"><ItemTemplate>
<asp:LinkButton ID="lnk" runat="server" CommandArgument = 'xxx'>xxx</asp:LinkButton>
</ItemTemplate></asp:TemplateField></Columns>
</asp:GridView>
</form>
我的代码背后:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//recurse(this.Controls);
}
private static void recurse(ControlCollection controls)
{
foreach (Control control in controls)
recurse(control.Controls);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
var dt = new DataTable();
dt.Columns.Add("Link", typeof(string));
DataRow dr = dt.NewRow();
dr["Link"] = "google.com";
dt.Rows.Add(dt);
DataSet ds = new DataSet();
ds.Tables.Add(dt);
gv.DataSource = ds;
gv.DataBind();
}
}
protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (this.Application["counter"] == null)
this.Application["counter"] = 0;
this.Application["counter"] = (int)this.Application["counter"] + 1;
Response.Write("JUNK" + this.Application["counter"]);
}
最佳答案
@jbl 找到了一些对我来说足够好的解释(感谢搜索技巧!)。这个问题以前在这里见过:http://forums.asp.net/t/1043999.aspx/1
总结该页面,在 Init 阶段以任何方式访问 GridView 的 .Controls
属性都会破坏其 ViewState。没有解释为什么,但无论如何都观察到了。
该页面上有一个对我来说足够好的解决方法。如果您检查每个控件以查看它是否 .HasControls()
并且如果没有则不访问其 .Controls
属性,则 ViewState 不会丢失,因此事件将正常触发。
附言我猜这是一个错误,但当然,由于向后兼容,它不能永远改变 :(
关于c# - 递归遍历控件在 OnInit 中禁用 GridView RowCommand 并丢失 Viewstate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414284/
我正在尝试以编程方式在 ASP.NET 中添加一个按钮,以 C# 作为后端。我能够显示该按钮,但当用户单击该按钮时 RowCommand 没有被触发。 我认为问题在于我在用户单击“提交”按钮后创建按钮
这可能看起来像是重复的,但我不这么认为。我已经搜索过 stackoverflow,可能还不够。 这是我的挑战: ' Text="Delete" OnClientClick="return con
Gridview RowCommand 没有在服务器上触发,但是当我在本地系统上使用它时它可以工作。但是当我发布并发布到服务器时 RowCommand 没有被触发..你能给我一个解决方案吗...这是我
我已经找到了解决方案,我只是想发布它,以便对某些人有用 这是使用命令的按钮
我有一个显示产品版本的网格和一些链接按钮,如编辑、删除、预览等。单击编辑按钮后,我想获取产品 ID 和版本 ID,并重定向到某个 xyz.aspx 页面,可以在其中编辑产品详细信息。 这是我的网格的样
我有一个看起来像这样的 GridView: ... '
' runat="server" Text="View"> 代码隐藏: protected void t
当调用 rowcommand 时,我尝试跨多个命令参数发送: ' />
' runat="server" Text="View"> 代码隐藏: protected void t
我的 GridView 基本上显示数据库中数据的汇总版本。 我想做的是设置它,以便当您单击 GridView 中一行中的任意位置时,它应该执行一个设置过程,该过程将隐藏包含 GridView 的面板并
首先,我意识到其中的大部分也可以使用 ItemTemplates 来完成。如果我尝试做的事情根本不可能,我会考虑改用它们。 以下是我的困境的基本情况: 我在代码隐藏中加载的 ASPX 页面中有一个 G
来自德国的美好下午, 我在带有 RowCommand 事件的行上有一个 asp:GridView 和 ButtonFields。 protected void gridView_RowCommand(
我正在尝试将 TextBox 中的 Value 转换为 gridview 的 RowCommand 中的 int。 else if (e.CommandName == "UpdateRow") {
您好,我有一个 GridView ,每行都有一个文本框,我正在尝试获取 RowCommand 事件中的值。下面的代码适用于除第一行以外的所有行。第一行的 textbox.text 值始终为空。
我在 aspx 中使用 gridview,我有两个页面,注册和 details.aspx 一旦注册完成,它应该转到 details.aspx 中的详细信息页面。我在那个 GV 中保留了一个 gridv
我有一个 asp.net GridView: ' CommandName="ViewFactors" ImageUrl="~/tadarokat/Images/factor
我有一个 gridview,在这个 gridview 上有一个 linkbutton。 单击链接按钮时,rowCommand 触发,但是我想要求用户使用确认框确认单击, 如果是 -> rowComma
有谁知道如何从 ASP 中的 Gridview RowCommand 事件调用 Javascript 函数? 我需要调用函数来接收 rowindex 但我不知道如何从 rowcommand 调用 ja
我有一个带链接按钮的 GridView 。我使用 jquery 和 css 为链接按钮设置了一个灯箱。 链接按钮源代码 '
我正在使用 GridView绑定(bind)到 List .当RowCommand被某个按钮触发 我希望能够检索当前行的 Customer来自 e.CommandArgument 的对象,像这样: p
我是一名优秀的程序员,十分优秀!