簡體   English   中英

UpdatePanel中的標簽文本不會刷新

[英]Label Text inside UpdatePanel doesn't refresh

我在ListView ItemTemlate中有標簽,我希望通過單擊也在ItemTemlate中的linkbutton刷新它。

頁面代碼:

<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


    }

這很好。 謝謝大家 您的建議非常有用。

考慮擺脫itemtemplate內的更新面板,而是將整個listview包裝在updatepanel中

現在,LinkBut​​ton單擊實際上已冒泡到listview控件,因此處理linkbutton單擊不會產生所需的效果。 相反,您應該在listview上處理ItemCommand事件

<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/zh-cn/library/system.web.ui.webcontrols.listview.itemcommand(v=vs.110).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM