【问题标题】:ItemCommand event doesn't fire with repeater control中继器控制不会触发 ItemCommand 事件
【发布时间】:2011-02-22 09:52:39
【问题描述】:

我正在建立一个网站,人们在结账购物车(并转移到支付 iframe)之前可以选择从购物车列表中删除哪些商品。购物卡的结果列在 Repeater 控件中。中继器中有一个按钮,可以从数据库中删除一条记录(使用 LINQ to SQL 来执行此操作。)

问题是当我单击按钮时 ItemCommand 事件不会触发。我试过response.write(test) 还是不行。

好像中继器无法与命令交互。但它确实会渲染结果。

  <asp:Repeater ID="RepeaterKoshnichka" 
       runat="server" OnItemCommand="RepeaterKoshnichka_ItemCommand"
  DataSourceID="LinqDataSource1">

  <ItemTemplate>
  <tr>
  <td background="images/message-bar.gif">
  <div class="message_head" style="float:left"><cite>Производ: <asp:Label ID="lblProizvod" CssClass="red_tx" Text='<%# Eval("Proizvod") %>' runat="server"></asp:Label> / Тип на Претплата: <asp:Label ID="lblPretplata" runat="server" Text='<%# Eval("Tip") %>' CssClass="red_tx"></asp:Label></cite></div>

  <div class="message_head" style="float:right"><cite>Цена: <asp:Label ID="lblCena" CssClass="red_tx" Text='<%# Eval("Cena") %>' runat="server"></asp:Label>&nbsp;

  <asp:Button ID="Button2" CssClass="main_tx" CommandName="Delete" CommandArgument='<%# Eval("NDetID") %>' runat="server" Text="Отстрани" /></cite>  
  </div>  
  </td> 
  </tr>  
  </ItemTemplate>  
  </asp:Repeater>

  protected void RepeaterKoshnichka_ItemCommand(object source, RepeaterCommandEventArgs e)
  {
     if (e.CommandName == "Delete")
     {
        if (Request.Form[e.CommandArgument.ToString()] != null)
        {  
           if (Page.User.Identity.IsAuthenticated)
           { 
               var nar = new DataClasses1DataContext();  
               Guid detnar = new Guid(e.CommandArgument.ToString());

               var query = from c in nar.Naracka_Dets 
                           where c.NDetID == detnar
                           select c;

               foreach (var c in query) 
               { 
                 nar.Naracka_Dets.DeleteOnSubmit(c);
               }
               nar.SubmitChanges();
               lblSuma.Text = ((Button)e.CommandSource).ToString();
           }
        }
     }
  }

【问题讨论】:

    标签: c# asp.net repeater itemcommand


    【解决方案1】:

    &lt;asp:GridView&gt; 可能是您正在处理的更好的服务器控制。

    顺便说一句,请考虑对您的代码进行一些小改动。为了使其更具可读性,请将您的 3 个条件合并为一个 if

     if (e.CommandName == "Delete" &&
         Request.Form[e.CommandArgument.ToString()] != null &&
         Page.User.Identity.IsAuthenticated)
     {
         //delete things.
     }
    

    【讨论】:

      【解决方案2】:

      如果您不习惯使用 Repeater,您应该切换到 DataGrid 并使用 ButtonColumn 来实现此功能 - 这将使您处理项目事件变得更轻松。

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多