gpt4 book ai didi

c# - 从 UpdatePanel 以编程方式强制完全回发

转载 作者:太空狗 更新时间:2023-10-29 21:29:45 24 4
gpt4 key购买 nike

我在更新面板中有一个 GridView。它是一个继承的 asp:GridView,所以它有一个小的“导出我”图标,它就是这样做的。它通过使用 XLS 文件响应“导出”点击来工作。问题是,如果将智能 GridView 放在更新面板中,ASP.NET 认为 XLS 文件要写入面板,这显然不是我们想要的。为此,我每次都需要完整的回发。

我的更新面板都是程序化生成的

在这种情况下不起作用的解决方案(其中许多在 SO 的其他地方介绍):

  1. 在版本 4 之前的 ASP.NET 中,如果您将 ID 从控件中删除,它甚至会从更新面板中执行完整的回发。我的问题仅针对最新最好的 .NET 4。

  2. ScriptManager.RegisterPostBackControl 看起来很有前途。它确实使控件回发使用正确的面板 ID 作为事件目标,但没有其他帮助。

  3. 将 PostBackTrigger 添加到“更新”面板。我的更新面板是通过编程方式生成的,而 MS 声明这不受支持。我的测试表明它们是正确的:我尝试了所有方法,但这不起作用。

  4. 我不太喜欢智能 GridView 必须脱离自身的想法,但在这些情况下,我试图让它在 updatePanel 之外放置一个额外的控件。想法是让客户端点击面板内的我的导出按钮被客户端javascript重定向以模拟点击面板外的那个按钮。然而,这不起作用,因为我显然无法将“外部”控件添加到页面 - 我得到“在 DataBind、Init、Load、PreRender 或 Unload 阶段无法修改控件集合”。错误。

  5. 使用 jQuery 将“导出”控件移到面板之外。 MS 必须有一些他们认为在面板“中”的控件列表,DOM 中的物理位置无关紧要。

有没有人知道如何让它发挥作用?我知道其中很多应该有效,但这不是一回事。

最佳答案

对我来说,解决方案 3 有效。

我向页面动态添加一个 UpdatePanel,向内容模板添加一个 Button 并关联一个 PostBackTrigger。我添加了一个 Click 事件处理程序,我在其中用当前日期/时间更新标签(在 UpdatePanel 之外)。

请参阅下面的测试设置。

标记

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:Panel ID="Panel1" runat="server"></asp:Panel>
<asp:Label ID="Label1" runat="server"></asp:Label>

代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
string buttonId = "Button1";

UpdatePanel updatePanel = new UpdatePanel();
updatePanel.ID = "UpdatePanel1";

Button button = new Button();
button.ID = "Button1";
button.Text = "Post back";
button.Click += new EventHandler(button_Click);

updatePanel.Triggers.Add(new PostBackTrigger() { ControlID = buttonId});

updatePanel.ContentTemplateContainer.Controls.Add(button);

Panel1.Controls.Add(updatePanel);
}

void button_Click(object sender, EventArgs e)
{
Label1.Text = string.Format("Current date/time: {0}", DateTime.Now.ToString());
}

希望这对您有所帮助。

关于c# - 从 UpdatePanel 以编程方式强制完全回发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com