UpdatePanel이 전체 페이지 포스트 백을 일으키지 않도록하는 방법은 무엇입니까?
-
05-09-2019 - |
문제
Community Server 2008 프레임 워크 내부에서 .NET 3.5를 사용하고 페이지를 구축하고 있습니다.
페이지 중 하나에서 업데이트 패널이 작동하려고합니다.
Asp.net 웹 사이트에서 바로 샘플을 가져 왔습니다. 버튼을 클릭하여 현재 시간으로 업데이트 패널의 시간을 업데이트하고 그러나 어떤 이유로 든 기능을 수행하려고 할 때 전체 페이지가 새로 고침됩니다.
다음은 다음과 같습니다.
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
Label2.Text = "Panel refreshed at " + DateTime.Now.ToString();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<fieldset>
<legend>UpdatePanel</legend>
<asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
버튼을 클릭 할 때마다 패널이 업데이트되지만 전체 페이지가 다시 게시됩니다! 전체 페이지가 깜박일 수 있습니다. 내가 뭘 잘못하고있는거야?
나는 중첩 된 마스터 페이지 안에 있지만 이것이 문제인지 확실하지 않습니다. 이 커뮤니티 서버 프레임 워크에는 모든 이벤트가 게시되게하는 것이있을 수 있습니까?
해결책
설정 해보 셨나요? Button1
로서 AsyncPostBackTrigger
트리거 섹션에서? 설정 ChildrenAsTriggers
속성 true
그리고 UpdateMode
속성 Conditional
.
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();
UpdatePanel1.Update();
}
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
<ContentTemplate>
<fieldset>
<legend>UpdatePanel</legend>
<asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
다른 팁
위의 코드 샘플에서 Label2가 보이지 않습니다. Label2가 UpdatePanel 외부에있는 경우 페이지가 Label2를 올바르게 업데이트하는 데 필요한 것이기 때문에 전체 페이지 새로 고침이 발생합니다.
기본적으로 UpdatePanels는 내부의 컨트롤에 의해 트리거 될 때만 콘텐츠를 동적으로 새로 고침합니다. 더 멋진 업데이트를 수행 해야하는 경우 패널 외부의 버튼을 말하면 다른 패널의 새로 고침 또는 레이블을 업데이트 할 수 있습니다. 그러면 UpdatePanel (S)에서 조건부 속성을 설정하고 수동 업데이트 호출을해야합니다. 코드에서.
또 다른 가능한 이유는 페이지가 있다면 ClientIDMode="static"
, 그런 다음 업데이트 패널 만 새로 고침 할 것으로 예상되는 컨트롤은 전체 페이지를 새로 고칩니다.
문제를 해결하려면 ClientIDMode="AutoID"
updatepanel 게시물을 다시 트리거 해야하는 컨트롤에서.
세트 ChildrenAsTriggers="true"
업데이트 패널 컨트롤에서.
"기본적으로 UpdatePanels는 내부의 컨트롤에 의해 트리거 될 때만 콘텐츠를 동적으로 새로 고치게합니다."
그렇지 않으면 전체 페이지가 새로 고침됩니다! 그게 요점!
.NET Framework v1.1에서 업그레이드 된 이전 프로젝트가있는 경우 웹 구성 에서이 라인을 제거하여 작동하도록합니다.
<xhtmlConformance mode="Legacy"/>