C # Передача содержимого текстового поля через CommandArgument в Repeater - PullRequest
2 голосов
/ 20 июня 2011
<asp:Repeater ID="Cartridges" runat="server" onitemcommand="Cartridges_ItemCommand">
    <ItemTemplate>
        <p class="cartprice"><%#String.Format("{0:C}", Eval("Price"))%></p>
        <hr class="hr4" /> 
        <p class="cartqty">QTY <asp:TextBox ID="cartQty" Text="0" runat="server"></asp:TextBox> </p>
        <div class="cartbuy2"><asp:LinkButton ID="buy" runat="server" CommandName="AddtoCart" CommandArgument=<%#Eval("cartID") %> Text="Buy"></asp:LinkButton></div>
   </ItemTemplate>
</asp:Repeater>

Как передать значение текстового поля в CommandArgument?Извините, полностью потерян ...

Ответы [ 3 ]

3 голосов
/ 20 июня 2011

Вы пробовали: CommandArgument='<%#Eval("cartID") %>'

это отличается от вашего, поскольку оно заключено в одну кавычку, я думаю, это правильный синтаксис.

2 голосов
/ 20 июня 2011

Используйте FindControl, чтобы получить другие предметы в Предмете повторителя. Например:

 protected void repeater_ItemCommand(object sender, RepeaterCommandEventArgs e)
 {
      LinkButton lb = (LinkButton)e.CommandSource;
      string textBoxValue = ((TextBox)lb.Parent.FindControl("cartQty")).Text;         
 }
0 голосов
/ 20 июня 2011

вам нужно привязать cartId к кнопке ссылки наItemDataBound, а затем получить к ней доступ по элементу команды, я изменил код для вас, попробуйте

    <asp:Repeater ID="Cartridges" runat="server" onitemcommand="Repeater_OnItemCommand" OnItemDataBound="Repeater_OnItemDataBound">
<ItemTemplate>
    <p class="cartprice"><%#String.Format("{0:C}", Eval("Price"))%></p>
    <hr class="hr4" /> 
    <p class="cartqty">QTY <asp:TextBox ID="cartQty" Text="0" runat="server"></asp:TextBox> </p>
    <div class="cartbuy2"><asp:LinkButton ID="buy" runat="server" CommandName="AddtoCart" Text="Buy"></asp:LinkButton></div>

ваш onItemdatabound должен выглядеть следующим образом

 protected void Repeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {

        //your code...

          LinkButton add = (LinkButton)e.Item.FindControl("buy");
                  add.CommandArgument = cartID.ToString();

    }

и затем вы можете получить доступ к текстовому полю по команде элемента, как это

 protected void Repeater_OnItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "AddtoCart")
            {
                LinkButton btnEdit = (LinkButton)e.CommandSource;
                if (btnEdit != null)
                {
                    string editId = btnEdit.CommandArgument;
                    string text = ((TextBox)e.Item.FindControl("cartQty")).Text;
                    //do some stuff with your cartid and quantity
                }
            }
}

Вы также можете расширить свой код с помощью аргументов команды редактирования / удаления, добавив дополнительные кнопки ссылок и привязав их к правильной команде, а затем получив доступ к ним в команде элемента. Спасибо

...