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

サーバーからの動的コンテンツでラベルを更新する必要がある場合は、同じ updatepanel または別の updatepanel にラップしてください。

ラベル テキストが動的でない場合は、適切なイベントを発生させる前に、おそらく JS を使用してラベルを変更できます。

また、UpdatePanel は「ポストバックを引き起こします」。あなたがそれらに気付かないだけです。

または、次のようにすることもできます。

<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 に答える