2013-11-24 3 views
0

У меня есть ярлык внутри ListView ItemTemlate, и я хочу, чтобы он обновлялся щелчком по ссылке, которая также находится внутри ItemTemlate.Ярлык Текст внутри UpdatePanel не обновляется

Страница Код:

<asp:ListView ID="ListView1" runat="server" DataKeyNames="SongID" DataSourceID="AlbumSongsDataSource" OnItemCommand="ListView1_ItemCommand" > 

      <EmptyDataTemplate> 
       <span>No data was returned.</span> 
      </EmptyDataTemplate> 

      <ItemTemplate> 

      <div href='<%# Eval("getSongPath") %>' style="width: 400px;" class="item"> 
       <div> 
        <div class="fr duration">02:06</div> 
        <div class="btn play"></div> 
        <div class="title"><b><asp:Label ID="ArtistLabel" runat="server" Text='<%# Eval("Artist") %>' /></b> -<asp:Label ID="TitleLabel" runat="server" Text='<%# Eval("Title") %>' /></div> 
        </div> 
       <div class="player inactive"></div> 

    <asp:UpdatePanel ID="LikesUpdate" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="True" > 
<ContentTemplate> 
       <div class="likes" runat="server"> <asp:Label ID="LikesLabel" runat="server" Text='<%#Eval("getLikes") %>'/> <asp:LinkButton ID="LikeButton" runat="server" Text="Like" CommandName="Like" CommandArgument='<%# Eval("SongID") %>' ></asp:LinkButton></div> 
       </div> 

  </ItemTemplate> 

     </asp:ListView> 

код позади:

 protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) 
    { 
     int s = int.Parse(e.CommandArgument.ToString()); 

     ((LinkButton)e.Item.FindControl("LikeButton")).Text = "OK!"; 

     string UserId = User.Identity.GetUserId(); 
     MusicStoreEntities1 m = new MusicStoreEntities1(); 
     if (m.Likes.Where(x => (x.UserID == UserId) && (x.SongID == s)).Count() == 0) 
     { 
      Likes L = new Likes(); 
      L.SongID = s; 
      L.UserID = UserId; 
      L.PlaylistID = null; 
      m.Likes.Add(L); 
      m.SaveChanges(); 
     } 
     else 
     { 
      Likes L = m.Likes.Where(x => (x.UserID == UserId) && (x.SongID == s)).FirstOrDefault(); 
      m.Likes.Remove(L); 
      m.SaveChanges(); 

     } 
     ((Label)e.Item.FindControl("LikesLabel")).Text = m.Likes.Where(x => (x.SongID == s)).Count().ToString();//Manually set likes 


    } 

Это прекрасно работает. Спасибо за все. Ваши советы были очень полезными.

+0

Привет. Похоже, у вас есть не-хорошо сформированная разметка ... есть закрытый тег div внутри шаблона contenttemplate upatepanel ... – deostroll

+0

Да, я исправил его, но он ничего не меняет. В любом случае, спасибо – romandemidov

+0

Пожалуйста, разместите разметку, которая будет отформатирована в следующий раз. – deostroll

ответ

0

Рассматривает избавившись от панели обновления внутри ItemTemplate, и вместо того, чтобы оборачивать весь ListView в UpdatePanel

Теперь LinkButton щелчок фактически ый до элемента списка, так обработки LinkButton щелчка не будет производить желаемый эффект. Вместо этого вы должны обрабатывать событие ItemCommand на ListView за

<asp:ListView ID="ListView1" runat="server" DataKeyNames="SongID" 
    DataSourceID="AlbumSongsDataSource" OnItemCommand="ListView1_ItemCommand" > 
    ... 
    ... 
    ... 
</asp:ListView> 

Код:

protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e) 
{ 
    //Handle button click here... 
    //Use e.CommandName to figure which button triggered 
    //use e.CommandArgument to figure which data item 
} 

Посмотрите в документации для новых идей: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemcommand(v=vs.110).aspx

+0

Спасибо за ваш ответ и ссылку. Это было очень полезно. Я могу обновить текст метки в коде за ручным. Но я хотел сделать это с привязкой данных. – romandemidov

Смежные вопросы