Close -6ren">
gpt4 book ai didi

javascript - 用户控件内的 RegisterStartupScript

转载 作者:行者123 更新时间:2023-11-28 09:47:01 25 4
gpt4 key购买 nike

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ChatUserControl.ascx.cs"
Inherits="MetamorphismApp.ChatUserControl" %>
<asp:Timer ID="timer1" runat="server" OnTick="timer1_Tick" Interval="5000">
</asp:Timer>
<div id="divChatWindow" class="clChatWindow">
<div>
<asp:Label runat="server" Text='<%# Eval("username") %>' class="divHeader" ID="lblChatFriend"></asp:Label>
<asp:Image ID="imgFriend" runat="server" CssClass="classFriendImage"/>
<asp:LinkButton ID="lbClose" runat="server" CommandName="Close" CssClass="lbClose"
OnClick="lbClose_Click">Close</asp:LinkButton></div>
<div class="chatText" id="idChatText" runat="server">
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="timer1" EventName="Tick" />
<asp:AsyncPostBackTrigger ControlID="btnSendChat" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Repeater runat="server" ID="rpChatMessages">
<ItemTemplate>
<asp:Image ID="imageForFriend" runat="server" CssClass="clFriendsImage" ImageUrl='<%# "HttpImageHandler.jpg?username=" + DataBinder.Eval(Container.DataItem,"fromusername").ToString() %>' />
<asp:Label ID="chatMessage" runat="server" Text='<%# Eval("Message") %>'></asp:Label>
<br>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:TextBox ID="txtChatMessage" runat="server" Width="142px" CssClass="clChatMessage"
TextMode="MultiLine"></asp:TextBox>
<asp:LinkButton ID="btnSendChat" runat="server" CommandName="Insert" CommandArgument='<%# Eval("username") %>'
OnClick="btnSendChat_Click">Send</asp:LinkButton>
</div>





protected void btnSendChat_Click(object sender, EventArgs e)
{
TextBox txt = this.FindControl("txtChatMessage") as TextBox;
string username = lblChatFriend.Text;
ucc.InsertMessage(Session["username"].ToString(), username, txt.Text);

string javaScript = "<script type='text/javascript'>\n" + "CallScroller();\n" + "</script>";
ScriptManager.RegisterStartupScript(this, typeof(ChatUserControl), "startUpScript", javaScript, false);
}

btnSendChat 函数位于用户控件代码隐藏文件中。 CallScroller 函数没有被调用。

最佳答案

这是因为 RegisterStartupScript 在加载 DOM 时被调用,相当于 jQuery:

$(function () { ... });

由于您使用触发器从 UpdatePanel 内的按钮捕获事件,因此您实际上部分渲染了 View ,这就是使用 RegisterStartupScript< 注册脚本的原因 在这种情况下永远不会运行

替代方案:

对 Sys.load 事件使用react

每次部分呈现页面时都会引发此事件。

按如下方式处理事件:

    <asp:ScriptManager runat="server" ID="sm">

</asp:ScriptManager>
<script type="text/javascript">
function callScroller() {
alert("call scroller called");
}
Sys.Application.add_load(function () {
if ($get("hidden").getAttribute("value") == "1") {
callScroller();
}
});
</script>

UpdatePanel.ContentTemplate 中添加一个 HiddenField,将其用作标志来指示何时调用 JavaScript 函数,如果没有它,你的函数会在每个帖子上被调用

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:HiddenField runat="server" ID="hidden" Value="0" />
....

最后,在最适合您需求的事件中打开后面的代码:

    protected void btnSendChat_Click(object sender, EventArgs e)
{
this.hidden.Value = "1";
}

就是这样

关于javascript - 用户控件内的 RegisterStartupScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664879/

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