[英]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中
現在,LinkButton單擊實際上已冒泡到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.