【问题标题】:LinkButton OnClick within a Nested Repeater嵌套中继器中的 LinkBut​​ton OnClick
【发布时间】:2020-04-17 15:41:37
【问题描述】:

我在 LinkBut​​ton 在嵌套中继器中触发 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();
        }
    }
}

到目前为止一切正常。我得到了我的流派组,在每个流派中,我得到了针对该流派标记的电影标题,以及针对每个电影标题的链接按钮。它是未触发 OnClick 事件的 LinkBut​​ton。

这是我用于 OnClick 事件的代码。

protected void LoadMovieTitle (Object sender, EventArgs e)
{
    LinkButton linkb = (LinkButton)(sender);
    string args = linkb.CommandArgument;

    Response.Redirect("movieinfopage.aspx?id=" + args);
}

我希望获得帮助的解决方案是我需要做什么才能让这些 LinkBut​​ton 在单击时触发其 OnClick 事件并访问 LoadMovieTitle。当我在此方法中设置中断时,它不会中断,告诉我 OnClick 事件没有找到或识别它。

【问题讨论】:

  • 我的answer 能解决您的问题吗?

标签: c# asp.net


【解决方案1】:

您需要将OnItemCommand 添加到中继器并将CommandName 添加到LinkBut​​ton:

<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);
    }
}

见: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/data-access/custom-button-actions-with-the-datalist-and-repeater/custom-buttons-in-the-datalist-and-repeater-cs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多