gpt4 book ai didi

c# - UpdatePanel 中的 JavaScript 代码

转载 作者:数据小太阳 更新时间:2023-10-29 05:46:03 24 4
gpt4 key购买 nike

好的:我在包含单个占位符的 aspx 页面上有一个 UpdatePanel。

在此占位符内,我根据某些外部条件附加了一系列用户控件之一(这是一个配置页面)。

在每个用户控件中都有一个 bindUcEvents() javascript 函数,它将各种 jQuery 和 javascript 事件绑定(bind)到用户控件内的按钮和验证器。

我遇到的问题是无法识别用户控件的 javascript。通常,updatepanel 回发时会执行 updatepanel 内的 javascript,但是页面找不到这些代码(我尝试通过 firebug 的控制台手动运行该函数,但它告诉我找不到该函数)。

有人有什么建议吗?

干杯,埃德。

编辑:

减少(但功能)示例:

标记:

<script src="/js/jquery-1.3.2.min.js"></script>
<form id="form1" runat="server">
<div>

<asp:ScriptManager ID="Script" runat="server" />

<asp:Button ID="Postback" runat="server" Text="Populate" OnClick="PopulatePlaceholder" />

<asp:UpdatePanel ID="UpdateMe" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Postback" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Literal ID="Code" runat="server" />
<asp:PlaceHolder ID="PlaceMe" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>

C#:

protected void PopulatePlaceholder(object sender, EventArgs e)
{
Button button = new Button();
button.ID = "Push";
button.Text = "push";
button.OnClientClick = "javascript:return false;";
Code.Text = "<script type=\"text/javascript\"> function bindEvents() { $('#" + button.ClientID + "').click(function() { alert('hello'); }); } bindEvents(); </script>";
PlaceMe.Controls.Add(button);
}

您会看到该按钮不会弹出警报消息,即使代码存在于页面上也是如此。

编辑2:

好吧,为了清楚起见,生产代码比绑定(bind)到文字上的单个函数要复杂得多,并且包含大量

<%= Control.ClientID %>

一些代码很难分解成非特定函数,而且毫无意义,因为它们每个都只用在一个地方(我们说的是非常具体的验证和奇怪的弹出触发器 + 一些逻辑) .

最佳答案

去掉 Literal 控件并使用 ScriptManager 注册您的脚本。出于同样的原因,您正在做的事情不起作用

window.document.getElementById('someId').innerHtml = "<script type=\"text/javascript\">alert('hey');</script>";

没用。试试这个:

protected void PopulatePlaceholder(object sender, EventArgs e)
{
Button button = new Button();
button.ID = "Push";

button.Text = "push";
button.OnClientClick = "return false;";


string script = "function bindEvents() { $('#" + button.ClientID + "').click(function() { alert('hello'); }); } bindEvents();";

ScriptManager.RegisterClientScriptBlock(this.Page, typeof(SomeClass), Guid.NewGuid().ToString(), script, true);


PlaceMe.Controls.Add(button);
}

RegisterClientScriptBlock 的参数可能需要更改,但您明白了。

关于c# - UpdatePanel 中的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864398/

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