【问题标题】:Set HTML input checkbox name in listview在列表视图中设置 HTML 输入复选框名称
【发布时间】:2010-11-18 02:20:54
【问题描述】:

我正在尝试在列表视图中添加一个复选框,其值为数据库中记录的 id,因此我可以允许用户检查他们想要删除的那些,当他们单击删除按钮时,我可以获得值集合带有 request.form 的复选框。

我的问题是,因为列表视图 ASP.NET 中的复选框将列表视图名称呈现为复选框的名称属性,它阻止我执行 request.form["checkboxname"]。

我不想使用 Listviews 删除命令,而只是使用 request.form 来获取检查值的集合。

如何设置 htmlinput 复选框的名称,以便 .NET 在渲染时不会更改它?

我试过了:

        ListViewDataItem dataItem = (ListViewDataItem)e.Item;
        HtmlInputCheckBox _CheckBoxDelete = (HtmlInputCheckBox)e.Item.FindControl("CheckBoxDelete");

            _CheckBoxDelete.Visible = true;
            _CheckBoxDelete.Value = DataBinder.Eval(dataItem.DataItem, "id").ToString();
            _CheckBoxDelete.Name = "deletechecked";

但它仍然呈现为:

<input name="PmList$ctrl0$CheckBoxDelete" type="checkbox" id="PmList_ctrl0_CheckBoxDelete" value="3" />

【问题讨论】:

    标签: asp.net html checkbox


    【解决方案1】:

    我这样做

        List<HtmlInputCheckBox> chkDeleteContacts = new List<HtmlInputCheckBox>();
    
        foreach (RepeaterItem item in rptrFamilyContacts.Items)
        {
            chkDeleteContacts.Add((HtmlInputCheckBox)item.FindControl("chkDeleteContact"));
        }
    
        foreach(HtmlInputCheckBox chkDeleteContact in chkDeleteContacts)
        {
            //Delete Contact
            if(chkDeleteContact.Checked)
                blnStatus = BusinessUtility.DeleteConsumerContact(LoginConsumerID, chkDeleteContact.Value);
        }
    

    在我看来稍微容易一些

    【讨论】:

      【解决方案2】:

      我已经把它整理出来了:

          string idCollectionTodelete = string.Empty;
      
          foreach (string x in Request.Form)
          {
              if (x.IndexOf("CheckBoxDelete") > -1)
              {
                   idCollectionTodelete += Request.Form[x] + ",";
              }
      
          }
          new DB().DeleteUserPm(
            ActiveUsername(), subdomain, idCollectionTodelete.TrimEnd(','));
      

      这不是一个理想的解决方案,但它确实对我有用。

      【讨论】:

        【解决方案3】:

        这是因为 ListView 是一个命名容器。您可以通过多种方式解决此问题,但它们都归结为以下选择:

        • 呈现所需的 HTML。
        • 以不同的方式取出选中的项目。

        前者是可行的,但您可能会失去很多 ASP.NET 的内置功能。除非您对控件生命周期非常熟悉,否则我建议您不要这样做。

        您已经获得了以 ASP 期望的方式提取值所需的一切:

        HtmlInputCheckBox _CheckBoxDelete = (HtmlInputCheckBox)item.FindControl("CheckBoxDelete");
        

        您只需要等待控件层次结构被填充,然后循环遍历 ListView.Items 以查找复选框。您的“删除”按钮的事件处理程序可能是调用它的好地方。

        顺便说一句,你为什么使用 HtmlInputCheckbox,而不是 CheckBox?

        【讨论】:

        • 我是 asp.net 的新手,并且正在使用控件进行实验,我发现 htmlinputs 更易于管理。如果我使用 asp 复选框,我将不得不通过回发和事件,并且在这个项目中使用 request.form 获取数据让我的生活更轻松
        • 很公平。整个页面/控件生命周期业务一开始可能会让人望而生畏,但一旦你了解它,它就会变得非常强大。祝你学习顺利!
        猜你喜欢
        • 2014-03-29
        • 1970-01-01
        • 2019-12-14
        • 2010-11-25
        • 1970-01-01
        • 2019-03-13
        • 2019-12-21
        • 2016-02-27
        • 1970-01-01
        相关资源
        最近更新 更多