【问题标题】:Asp.Net ListView passing parameters from a TextBoxAsp.Net ListView 从 TextBox 传递参数
【发布时间】:2011-08-30 22:32:37
【问题描述】:

大家好,我遇到了这个可怕的问题,我希望你们中的任何人都可以帮助我首先我有一个 ListView,它有(比如说)3 列 Id、Quantity 和一个带有操作的图像按钮。

图像按钮启动函数 createparameter 将字符串拆分为 2 个 int 变量,但我想从文本框 QuantityTextBox 中获取第一个 1,我该怎么做才能将文本框的值发送到函数,有什么想法吗?

protected string CreateParameter(object arg1, object arg2) 
        {
            return string.Concat(arg1, "|", arg2);
        }

我希望有更好的方法来做到这一点,而不是对每个列表项进行 foreach 然后找到控制,因为我不关心其他列表项,

【问题讨论】:

    标签: c# asp.net listview


    【解决方案1】:

    您想要做的事情不会按照您想要的方式工作,因为用户可以更改文本框的值。因此在运行时尝试将其绑定到 CommandArgument 是不合理的,因为那里还没有任何值。

    但是当您处理 ListView 的 ItemCommand 事件时,您可以访问该按钮被单击的 ListViewItem,因此您可以使用 FindControl 来获取文本框并查看其值。

    为此,您需要向 ImageButton 控件添加一个 CommandName 值。您只需在命令参数中直接传入产品 ID。

    所以,你的按钮应该是这样的:

    <asp:ImageButton ID="btnAdd" runat="server" Tooltip="Aggregar producto" CommandName="AddProduct"
      CommandArgument="<%# Eval("IdProduct") %>" />
    

    您的代码隐藏看起来像这样(未经测试):

      protected void lv_Productos_OnItemCommand(object sender, ListViewCommandEventArgs e)
      {
        if (String.Equals(e.CommandName, "AddProduct"))
        {
          // Get a reference to your textbox in this item
          TextBox textbox = e.Item.FindControl("QuantityTextBox") as TextBox;
    
          if (textbox != null)
          {
              int quant = 0;
              if (int.TryParse(textbox.Value, quant))
              {
                 int prodId = (int)e.CommandArgument;
    
                 //do what you want with the quantity and product id
              }
          }
    
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多