2013-05-08 3 views
2

업데이트 패널을 사용하고 있는데 때때로 전체 페이지가 새로 고쳐지기 때문에 그 이유를 알 수 없습니다.UpdatePanel 전체 페이지 새로 고침 때때로

(계정 제이슨 P의 대답에 걸릴 수정 됨.)

Masterpage 코드 :

<form runat="server" id="form1"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" enablePartialRendering="true" /> 

     <h1>Title</h1> 

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional" childrenAsTriggers="true"> 
      <ContentTemplate> 
       <ul class="letterLinks"> 
        <asp:Repeater runat="server" ID="Letter_Repeater"> 
         <ItemTemplate> 
          <li id='<%#Eval("Letter")%>'> 
           <asp:LinkButton runat="server" ID="UpdateLink" Text="My Text" 
          CommandName="BookLetter" CommandArgument='<%#Eval("Letter")%>' OnCommand="LoadBookTitles"/> 
          </li> 
        </ItemTemplate> 
        </asp:Repeater> 
       </ul> 
       <ul class="BookList"> 
        <asp:Repeater runat="server" ID="Title_Repeater"> 
         <ItemTemplate> 
          <li><a href='<%#Eval("URL")%>'><%#Eval("Title")%></a></li> 
         </ItemTemplate> 
        </asp:Repeater> 
       </ul> 
      </ContentTemplate>  
     </asp:UpdatePanel> 
     </form> 

코드 뒤에 :

public partial class MyBooks : System.Web.UI.MasterPage 
{ 
    private GetAllBookInfo setMyInfo = new GetAllBookInfo(); 
    private DataTable allTitleInfo = new DataTable(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     List<string> lettersWithBooks = new List<string>(); 
     DataTable letterLinks = new DataTable(); 

     // Get all letters that have Books 
     lettersWithBooks = setMyInfo.LettersWithBooks(); 

     // get properties for ABC links 
     letterLinks = GetLetterLinkProperties(lettersWithBooks); 

     // Bind abc link data to the ABC repeater 
     Letter_Repeater.DataSource = letterLinks; 
     Letter_Repeater.DataBind(); 

     allTitleInfo = setMyInfo.GetBookTitles(lettersWithBooks[0]); 

     // Bind title info data to title repeater 
     Title_Repeater.DataSource = allTitleInfo; 
     Title_Repeater.DataBind(); 
    } 

    private DataTable GetLetterLinkProperties(List<string> letters) 
    { 
     DataTable letterLinks = new DataTable(); 
     letterLinks.Columns.Add("Letter", typeof(string)); 
     letterLinks.Columns.Add("Class", typeof(string)); 
     letterLinks.Columns.Add("Enabled", typeof(bool)); 

     for (char c = 'A'; c <= 'Z'; c++) 
     { 
      if (letters.Any(letter => letter == c.ToString())) 
      { 
       letterLinks.Rows.Add(c, "hasGuides", true); 
      } 
      else 
      { 
       letterLinks.Rows.Add(c, "noGuides", false); 
      } 
     } 
     return letterLinks; 

    protected void LoadBookTitles(object sender, EventArgs e) 
    { 
     LinkButton letterLink = (LinkButton)sender; 

     allTitleInfo = setMyInfo.GetBookTitles(letterLink.CommandArgument as String); 

     // Bind title info data to title repeater 
     Title_Repeater.DataSource = allTitleInfo; 
     Title_Repeater.DataBind(); 
    } 
} 

답변

2

이 전체 문제가 확실하지만,하지 <Triggers> 요소는 어린이가 아닌 <ContentTemplate> 요소와 동일한 레벨이어야합니다.

<asp:UpdatePanel> 
    <Triggers> 
     ... 
    <Triggers> 
    <ContentTemplate> 
     ... 
    <ContentTemplate> 
</asp:UpdatePanel> 

또한이 경우 리피터가 LinkButton이 아니라 트리거 여야한다고 생각합니다. LinkButton에서 OnCommand 이벤트를 제거하고 Repeater에 추가하고 UpdatePanel의 트리거를 변경하십시오.

관련 문제