0

私が達成しようとしているのは、子の ascx コントロールだけで部分的にページをリロードすることです。ただし、ページの読み込み時に default.aspx にブレークを設定すると、タイマー ティックでブレークが発生します。私の理想的なシナリオは、default.aspx がリロードされないことです。

デフォルト.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server" />
</head>
<body>
<form id="form1" runat="server">
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQuery.js" />
        <asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryInclude.js" />
    </Scripts>
</telerik:RadScriptManager>
<script type="text/javascript">
    //Put your JavaScript code here.
</script>
<div>
    <asp:Label runat="server" ID="DynLabel"></asp:Label>
    <asp:PlaceHolder ID="PlaceHolderDyn" runat="server"></asp:PlaceHolder>
</div>
</form>

Default.aspx.cs

システムを使用する;
System.Web の使用;
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。

System.Data の使用;
System.Configuration を使用します。
System.Web.Security を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用します。
Telerik.Web.UI の使用;

パブリック部分クラス デフォルト: System.Web.UI.Page
{
    protected void Page_Load(オブジェクト送信者, EventArgs e)
    {

        ガイドg;
        g = Guid.NewGuid();
        DynLabel.Text = g.ToString();
        PlaceHolderDyn.Controls.Add(LoadControl("~/Docks/DynControl.ascx"));


    }


}

DynControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DynControl.ascx.cs" Inherits="Docks_DynControl" %>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
<AjaxSettings>
    <telerik:AjaxSetting AjaxControlID="Timer1">
        <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="LoadingPanel1">
            </telerik:AjaxUpdatedControl>
        </UpdatedControls>
    </telerik:AjaxSetting>
    <telerik:AjaxSetting AjaxControlID="DropDownList1">
        <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="Panel1"></telerik:AjaxUpdatedControl>
            <telerik:AjaxUpdatedControl ControlID="Panel2"></telerik:AjaxUpdatedControl>
        </UpdatedControls>
    </telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadAjaxLoadingPanel ID="LoadingPanel1" runat="server">
</telerik:RadAjaxLoadingPanel>
<asp:Timer ID="Timer1" runat="server" Interval="3000" OnTick="Timer1_Tick"></asp:Timer>
<asp:UpdatePanel ID="Panel1" runat="server" UpdateMode="Conditional" ViewStateMode="Enabled">
<ContentTemplate>
    <asp:PlaceHolder ID="DynamicPlaceHolder" runat="server"></asp:PlaceHolder>
    <asp:Labelrunat="server" ID="DynamiclabelAscx"/>
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>

DynControl.aspx.cs

システムを使用する;
System.Web の使用;
System.Web.UI を使用します。
System.Web.UI.WebControls を使用します。

System.Data の使用;
System.Configuration を使用します。
System.Web.Security を使用します。
System.Web.UI.WebControls.WebParts を使用します。
System.Web.UI.HtmlControls を使用します。
Telerik.Web.UI の使用;

パブリック部分クラス Docks_DynControl : System.Web.UI.UserControl
{
    protected void Page_Load(オブジェクト送信者, EventArgs e)
    {

    }
     public void Timer1_Tick(オブジェクト送信者, EventArgs e)
    {

        ガイドg;
        g = Guid.NewGuid();
        DynamiclabelAscx.Text = g.ToString();


    }


}

したがって、基本的に Default.aspx のラベルは静的で、一度だけ読み込まれ、タイマーが ascx のラベルをリロードし、常に変更されます。それは機能しますが、default.aspx がタイマーでリロードされないようにするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

0

いくつかの調査を行った後、ここにあなたの質問に対する答えがあります:

非同期ポストバックは、同期ポストバックと同様に動作します。すべてのサーバー ページのライフサイクル イベントが発生し、ビュー ステートとフォーム データが保持されます。ただし、レンダリング フェーズでは、UpdatePanel コントロールのコンテンツのみがブラウザーに送信されます。ページの残りの部分は変更されません。

MSDN ソース

そのため、Default.aspxPage_Loadメソッドをラップするの!IsPostBackがよい方法のようです。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Guid g;
        g = Guid.NewGuid();
        DynLabel.Text = g.ToString();
        PlaceHolderDyn.Controls.Add(LoadControl("~/Docks/DynControl.ascx"));
    }
}
于 2013-11-04T17:19:23.383 に答える
0

長い会話をしてくれたスコットに感謝します。

ポストバックを防ぐために私が考え出した最善の方法は、その aspx を指す IFrame 内の追加のコントロール aspx/ascx にすべてを含めることです。これにより、そのページのみがポストバックをレンダリングします。

于 2013-11-04T21:39:28.473 に答える