0

同じ件名で投稿しようとしましたが、うまくいきませんでした。実際にはイベントを発生させませんでした

私が欲しいもの

ItemCommandリピーターを1回クリックしたときにイベントを発生させたい 。

問題

ItemCommand発射されません。

EnableViewState=true

ここにコードがあります:

HTML:

<table>
              <asp:Repeater ID="outerRepeater" runat="server"
                    OnItemDataBound="outer_OnitemdataBound" 
                  onitemcommand="outerRepeater_ItemCommand">
                <ItemTemplate>
                <asp:Repeater ID="Rgallery" runat="server">
                    <ItemTemplate>
                      <%# (Container.ItemIndex + 4) % 4 == 0 ? "<tr>" : string.Empty %>  
                        <td>
                            <img src="<%# Eval("ImgPath") %>" style="height:300px; width:300px;" alt="" />
                                <div class="caption">
                         <h3><%# Eval("Type") %></h3>
                         <p><b><%# Eval("SubType") %></b></p>
                         <p{font-family: "Comic Sans MS", cursive, sans-serif; font-size: 25px}>Price:<i class="fa fa-inr fa-fw"><%# Eval("Price") %></i></p>
                         <p><asp:Button ID="btnBuy" CommandName="Buy" CommandArgument="Add to Cart" class="btn btn-primary" Text='<%# DataBinder.Eval(Container.DataItem, "Price") %>' runat="server" />
                         </p>
                        </div>
                        </td>
                        <%# (Container.ItemIndex + 4) % 4 == 3 ? "</tr>" : string.Empty%>
                    </ItemTemplate>
                </asp:Repeater>
                </ItemTemplate>
              </asp:Repeater>
              <asp:Label ID="lblStatus" runat="server" ></asp:Label>
    </table>

ここにコードビハインドがあります

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dummy = new DataTable();
        dummy.Columns.Add();
        dummy.Rows.Add();
        rptMain.DataSource = dummy;
        rptMain.DataBind();
        outerRepeater.DataSource = dummy;
        outerRepeater.DataBind();
    }
    if (Page.IsPostBack)
    { return; }

}

protected void outerRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    // Here is a code I want to fire
}
protected void outer_OnitemdataBound(object sender, RepeaterItemEventArgs e)
{
    Repeater repeater = e.Item.FindControl("RGallery") as Repeater;
    repeater.DataSource = db.GetTable("SELECT `Did`, `Type`, `SubType`, `Gender`, `Price`, `ImgPath` FROM `designs` ORDER BY `Did` DESC");
    repeater.DataBind();
}

私がこれまでに試したこと

方法 1

私は入れましたがonItemCommand="rptthumbnail_ItemCommand"、私は働きませんでした。

方法 2 ハンドラーを追加しましたが、うまくいきOnInit()ませんでした。

何が問題なのか特定してください。これで私を助けてください.....

4

1 に答える 1

0

ボタンは内部リピーターの子であるため、ItemCommand代わりにそのイベントをトリガーします。イベントバインディングをそのリピーターに移動すると、修正されるはずです。

<asp:Repeater ID="outerRepeater" runat="server"
    OnItemDataBound="outer_OnitemdataBound">
    <ItemTemplate>
        <asp:Repeater ID="Rgallery" runat="server"
            OnItemCommand="Rgallery_ItemCommand">
protected void Rgallery_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    // Here is a code I want to fire
}
于 2015-11-28T20:01:44.063 に答える