【问题标题】:Dynamically build linkbuttons, do not work动态构建链接按钮,不起作用
【发布时间】:2015-01-29 16:53:18
【问题描述】:

我想在 gridview 中动态创建链接按钮,并且在 Command 事件中我想下载一个以 varbinary 形式存储在数据库中的文件。

如果rowdatabound方法中有如下代码:

var attachments = (from a in dbContext.Attachments.Where(i => (i.ID == id)) select a);
                if (attachments.Any())
                {                    
                    foreach (Attachments Att in attachments)
                    {
                        LinkButton lb = new LinkButton();
                        lb.CssClass = "download";
                        lb.Text = Att.FileName;
                        lb.CommandName = "Attachment";
                        lb.CommandArgument = Att.AttachmentID.ToString();
                        lb.Command += ShowAttachmentFile;
                        e.Row.Cells[4].Controls.Add(lb);
                    }
                }

当我单击链接按钮时将执行回发。 并且动态添加的链接按钮的所有属性都消失了。

如果我调试代码,该函数将永远不会被触发。 commant事件方法的代码如下:

 protected void ShowAttachmentFile(object sender, CommandEventArgs e)
        {
            int fileID = Int32.Parse(e.CommandArgument.ToString());
            var downloadResult = (from a in dbContext.Attachments.Where(i => (i.id== fileID)) select a).First();

            Byte[] bytes = (Byte[])downloadResult.Data;
            Response.Buffer = true;
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = downloadResult.ContentType;
            Response.AddHeader("content-disposition", "attachment;filename="
            + downloadResult.FileName);
            Response.BinaryWrite(bytes);
            Response.Flush();
            Response.End();
        }

谁能告诉我为什么点击动态构建链接按钮时没有触发该功能。

【问题讨论】:

  • 始终在页面上添加控件,您将根据情况使刚才可见/不可见!
  • 这是动态添加控件的诅咒,每次回发后它们都会被删除,因此您必须在每次回发事件后重新添加它们。

标签: c# asp.net entity-framework gridview linkbutton


【解决方案1】:

问题是您需要在回发时重新绑定 GirdView。否则,这些动态填充的按钮会在您回发时变为空,并且它们无法触发 ShowAttachmentFile 事件。

最简单的方法是在设计时在 GridView 中添加下载按钮。然后在运行时显示/隐藏 rowdatabound - foreach 循环

【讨论】:

  • 感谢您的更新。我正在动态添加这些,因为它取决于查询结果必须添加多少按钮链接。
  • 一行中可以有多个下载链接
【解决方案2】:

感谢所有 cmets。 我通过删除 isPostback 检查解决了我的问题。

【讨论】:

  • 如果问题得到解决,则将任何一项建议标记为已回答。
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2012-09-17
  • 2016-04-06
  • 2017-05-23
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多