我在使用LinkButton在嵌套转发器中触发OnClick事件时遇到麻烦。
这是我的HTML标记
<asp:Repeater ID="RepeaterGenres" runat="server" OnItemDataBound="LoadTitles">
<ItemTemplate>
<asp:HiddenField ID="hdnGenre" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "GenreID") %>' />
<%# DataBinder.Eval(Container.DataItem, "MovieGenre") %>
<asp:Repeater ID="RepeaterMovies" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "MovieName") %>
<asp:LinkButton ID="lbMovieInfo" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "MovieID") %>' OnClick="LoadMovieTitle">
Access Info
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
这是我加载流派的方法。 (为简化起见,已删除了一些声明)。
string sqlString = "SELECT * FROM Movies_Genres";
sqlCmd = new SqlCommand(sqlString, myConnection);
sqlReader = sqlCmd.ExecuteReader();
if (sqlReader.HasRows)
{
RepeaterGenres.DataSource = sqlReader;
RepeaterGenres.DataBind();
}
这是我在每个流派中加载电影标题的方法。
protected void LoadTitles(object sender, RepeaterItemEventArgs args)
{
if (args.Item.ItemType == ListItemType.Item || args.Item.ItemType == ListItemType.AlternatingItem)
{
// Genre from HiddenField
HiddenField GenreID = (HiddenField)args.Item.FindControl("hdnGenre");
// Repeater
Repeater childRepeater = (Repeater)args.Item.FindControl("RepeaterMovies");
string sqlString = "SELECT * FROM Movies_Titles " +
"WHERE Genre = @Genre";
sqlCmd = new SqlCommand(sqlString, myConnection);
sqlCmd.Parameters.AddWithValue("@Genre", GenreID.Value);
sqlReader = sqlCmd.ExecuteReader();
if (sqlReader.HasRows)
{
childRepeater.DataSource = sqlReader;
childRepeater.DataBind();
}
else
{
childRepeater.DataSource = "";
childRepeater.DataBind();
}
}
}
到目前为止,一切都很好。我获得了流派组,并且在每个流派中,我都获得了针对该流派标记的电影标题,还获得了针对每个电影标题的链接按钮。只是LinkButton没有触发OnClick事件。
这是我用于OnClick事件的代码。
protected void LoadMovieTitle (Object sender, EventArgs e)
{
LinkButton linkb = (LinkButton)(sender);
string args = linkb.CommandArgument;
Response.Redirect("movieinfopage.aspx?id=" + args);
}
我希望获得帮助的解决方案是我需要做些什么,以使这些LinkButton在单击时激发其OnClick事件并访问LoadMovieTitle。当我中断此方法时,它不会中断,告诉我OnClick事件没有找到或识别它。
答案 0 :(得分:1)
您需要将OnItemCommand
添加到转发器,并将CommandName
添加到LinkButton:
<asp:Repeater ID="RepeaterMovies" runat="server" OnItemCommand="RepeaterMovies_OnItemCommand">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "MovieName") %>
<asp:LinkButton ID="lbMovieInfo" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "MovieID") %>' CommandName="MovieDetail">
Access Info
</asp:LinkButton>
</ItemTemplate>
</asp:Repeater>
服务器端:
protected void RepeaterMovies_OnItemCommand(object sender, RepeaterCommandEventArgs e)
{
if (e.CommandName.Equals("MovieDetail"))
{
LinkButton linkb = (LinkButton)(sender);
string args = linkb.CommandArgument;
Response.Redirect("movieinfopage.aspx?id=" + args);
}
}