无法更新标签外部更新面板

时间:2013-09-13 05:00:19

标签: c# asp.net

我花了很多时间研究如何在Update面板外更新标签。最后找到了一些东西,但它没有更新标签。如果我们刷新页面,它工作正常。请告诉我代码中的错误或任何新方法。请在下面找到我的代码。我认为需要为脚本管理器或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>

3 个答案:

答案 0 :(得分:3)

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

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

此外,UpdatePanels会&#34; 导致回发 &#34;。只是你没有注意到它们。

或者你可以这样做:

<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";
}

答案 1 :(得分:2)

您需要使用PageRequestManager pageLoaded 事件。

在更新页面上的任何内容之前,会引发 pageLoading 事件。因此,如果您还在其他任何位置更改了标签的内容,那么您在pageLoading活动中所做的更改将会丢失。

因此,当使用由于同步或异步回发而刷新页面上的所有内容后引发的pageLoaded事件,在此事件中创建的chnages将覆盖在其他任何位置进行的所有更改将是决赛。

<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>

答案 2 :(得分: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代码,请注意。