3

我花了很多时间研究如何在更新面板之外更新标签。终于找到了一些东西,但它没有更新标签。如果我们刷新页面,它工作正常。请让我知道代码中的错误或任何新的执行方式。请在下面找到我的代码。我认为需要为脚本管理器添加更多代码或 dataItem() 谢谢大家的回复!文件隐藏代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

public partial class scriptMgr : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)
{
}

protected void timer_Tick(object sender, EventArgs e)
{

if (ScriptManager1.IsInAsyncPostBack)
{

ScriptManager1.RegisterDataItem(Label3, "Hi");
}
}

}
}



Aspx page

 <div>

<asp:Label ID="Label3" runat="server" Text="krwelkr"></asp:Label>

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

        </asp:ScriptManager>

        <script type="text/javascript" language="javascript">

enter code here

        Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler);

        function PageLoadingHandler(sender, args) {

            var dataItems = args.get_dataItems();
            if ($get('Label3') != null)
                $get('Label3').innerHTML = dataItems['Label3'];

        }
    </script>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>

        </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer" EventName="Tick" />
            </Triggers>
        </asp:UpdatePanel>


    </div>
4

3 回答 3

5

如果您需要使用来自服务器的动态内容更新标签,请将其包装在同一个更新面板或另一个更新面板中。

如果标签文本不是动态的,您可以在触发正确事件之前使用 JS 更改标签。

此外,UpdatePanels 确实“导致回发”。只是你没有注意到它们。

或者你可以这样做:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode=Conditional>
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
            <ContentTemplate>
                <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            </ContentTemplate>
</asp:UpdatePanel>

代码隐藏:

protected void Button1_Click(object sender, EventArgs e)
{
   Label1.Text = "Updated";
}
于 2013-09-13T05:03:33.927 回答
3

您需要使用的pageLoaded事件PageRequestManager

在更新页面上的任何内容之前引发pageLoading事件。因此,pageLoading如果您还在其他任何地方对标签的内容进行了更改,您在事件中所做的更改将会丢失。

因此,当使用pageLoaded由于同步或异步回发而刷新页面上的所有内容后引发的事件时,在此事件中进行的更改将覆盖在其他任何地方进行的所有更改,并且将是最终更改。

<script type="text/javascript" language="javascript">

        Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler)

        function PageLoadedHandler(sender, args) {

            var dataItems = args.get_dataItems();
            if ($get('Label3') != null)
               // set Label3 to your actual values. You can test/debug by adding
               // any test value
                $get('Label3').innerHTML = "TTTTestingggg";


        }

    </script>
于 2013-09-13T06:32:45.947 回答
2

在事件后面的代码中添加注册脚本,

protected void timer_Tick(object sender, EventArgs e)
{
   if (ScriptManager1.IsInAsyncPostBack)
    {
      //ScriptManager1.RegisterDataItem(Label3, "Hi");
       ScriptManager.RegisterStartupScript(this, this.GetType(), "setLabelOrAnyName", "jQuery(function($) { $('#Label3').text('Whatever')});", true);
    }
 }

这应该有效。

如果您不使用jQuery库,请将代码替换为simple javascript.

于 2013-09-13T08:29:05.563 回答