gpt4 book ai didi

c# - 从 asp.net 代码隐藏执行 Javascript 函数?

转载 作者:行者123 更新时间:2023-11-29 15:52:12 25 4
gpt4 key购买 nike

好吧,这个问题应该很容易回答,但是由于 asp.net 和 jQuery 的混合如此之多,这有点像噩梦。

我想做的是淡化 div在客户查看我的 asp.net 页面期间的不同时间进出;我使用 jQuery 的 fadeTo() 淡出它在触发 UpdatePanel 更新(以指示那里的数据不新鲜)之前,我想在 UpdatePanel 更新后再次淡入。我已经更新了代码隐藏中的 UpdatePanel,这导致了 div的内容正在改变......但是我如何淡化 div又回来了?

在我看来,有两种方式;在页面加载时注册一个事件处理程序以检测何时 div的内容已更改并将其淡入淡出,或者在我更新 div 时从 asp.net 代码隐藏调用函数使其淡入。

在第一种情况下,div 似乎没有任何 事件触发的内容在变化,所以我似乎无法做到这一点。如果有人知道我如何在更新 div 时触发客户端事件,那将是一个不错的解决方案。

在第二种情况下,我认为这就是ClientScriptManager是为了,但它并不完全符合我的要求。我希望能够使用 ClientScriptManager 注册一个特定的 Javascript 函数然后告诉ClientScriptManager从我的代码隐藏在客户端中执行它。你似乎不能那样做。 ClientScriptManager.RegisterClientScriptBlock()简单地插入一些 <script>到 HTML 输出中,而不是调用函数。如果我继续注册以下内容,大概这会起作用:

<script>fadeBackIn();</script>

因为 Javascript 会立即被评估和运行,但这感觉很乱,而且我不得不不断为 key 随机生成一个新的唯一值这一事实加剧了这种感觉。 ClientScriptManager.RegisterClientScriptBlock() 的参数,因为它是专门为停止这种重复代码而设计的。但是,我正在努力寻找替代方案。任何人都可以想出一个更好的机制来让它发挥作用的好主意吗?

我真的很喜欢这样的东西:

ClientScriptManager.RegisterClientScriptFunction("fadeBackIn", "function fadeBackIn(){ ... }");

[...]

ClientScriptManager.ExecuteClientScriptFunction("fadeBackIn");

但我没有看到该功能可用。 :-(

最佳答案

您可以附加到页面加载事件。 pageLoaded 处理程序接收一个 PageLoadedEventArgs 类型的参数,其中包含一个 get_panelsUpdated 方法,您可以调用该方法来枚举其内容刚刚更新的所有 UpdatePanel。

例子:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);

function pageLoaded(sender, args)
{
var panels = args.get_panelsUpdated();

if (panels.length > 0)
{
for (var i in panels)
{
if (panels[i].id == "DesiredUpdatePanelId")
{
fadeBackIn();
}
}
}
}

关于c# - 从 asp.net 代码隐藏执行 Javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087920/

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