【问题标题】:How do I retrieve / compare items in an HTML Listbox using C#如何使用 C# 检索/比较 HTML 列表框中的项目
【发布时间】:2013-08-23 03:22:44
【问题描述】:

这一定很容易......但我还是一样。

问题来了:

在一个可能在任何新标准发明之前创建的 ASP.net 项目中,存在两个 HTML 列表框,我们称它们为 listBox AlistBox B强>。通过 HTML,我的意思是他们使用 HTML 标签,而不是 ASP 标签:

<select name="listBoxB" id = "listBoxB" size="15" >  
<option>--------Selected Approvers--------</option>                    
<%                            
SQLDataFactory.WorkflowApproversGroupDetails SQLDFSelectedApprovers = new SQLDataFactory.WorkflowApproversGroupDetails();
DataTable dt1 = SQLDFSelectedApprovers.GetApproversGroupDetails(Request);
foreach (DataRow row1 in dt1.Rows)
{
   if (row1["ID"].ToString().Equals(Request.Form["listBoxB"]))
      Response.Write("<option selected value='" + row1["ID"].ToString() + "'>" + row1["EMPNONAME"].ToString() + "</option>");
   else
      Response.Write("<option value='" + row1["ID"].ToString() + "'>" + row1["EMPNONAME"].ToString() + "</option>");
}
dt1.Dispose();
%>
</select>

listBox B 只真正从数据库中获取数据。

listBox A 包含更完整的数据集(也是从数据库中获取的,不同的表)。该表单允许用户通过添加和删除按钮将数据从 A 传输到 B。添加和删​​除按钮只使用插入或删除语句。 这很好用。

但是,有一个错误。即,您可以多次将列表框 A 中的数据添加到列表框 B 中。这是不允许的。

我提出的解决方案的逻辑如下:

按下“添加”按钮后,将循环遍历列表框 B 的所有项目。如果它已经包含要添加的项目,则不会向数据库添加任何内容,因此,列表框 B 将不显示任何新内容。否则,它会将项目添加到数据库中,这也会更新 listBox B 的列表。按原样移除支撑。

听起来简单又足够,是吗?我遇到了一些障碍。

如何检索两个列表框项(A 中的选定项,B 中的所有项)?

我是否做一个 Request.Form["listBox B"],通过 For 循环运行它,然后将它添加到数组中?为此,我可能还需要 listBox B 项目计数。我如何获得这些东西?

此外,没有 LINQ。我只被允许使用 .NET 2.0,所以我想我将不得不找到其他方法来比较 A 中的选定项目与 B 中的项目列表。我正在查看以下内容:

int index = Array.FindIndex(itemB, delegate(string s) { return s.Equals(test); });

其中 itemB 是 listBox B 中的项目数组,s 是 listBox A 中选定的项目。

谢谢。

【问题讨论】:

  • +1 因为我为你在 2013 年不得不使用 .NET 2.0 感到难过。
  • 是的,好吧,我只能使用可用的工具添加到软件中 - 不能对它进行太多修改,以至于客户应该推出一组新的需求。

标签: c# asp.net .net-2.0


【解决方案1】:

我认为在必须考虑客户端验证之前在服务器端进行此类验证不是一个好主意 我建议您使用一个简单的 JavaScript 函数来过滤第二个列表并删除重复项,您可以在文档就绪功能上执行此操作,因为我认为您每次添加记录时都会重新加载页面

$(document).ready(function() {
  var prev;
$('select[name=listBoxB] option').each(function() {
    if (this.text == prev)
     {
        $(this).remove();
     }
    prev= this.text;
});
});

【讨论】:

  • 有趣。我根本没有想到 Javascript(也因为我对它的经验有限)。我不确定这是否会有所帮助,因为它只是删除列表中的内容,而不是阻止它写入数据库。也就是说,在进一步探测后,“添加”按钮确实调用了 Javascript 函数……出于某种原因……然后通过 HTTP 请求调用 C# 部分。也许我可以在其中的某个地方插入这段代码。
【解决方案2】:

您必须使用 runat="server" 声明选择标签才能使用标准的服务器端技术。其余的你可能自己想办法,但我发现 http://www.aspnettutorials.com/tutorials/controls/htmlselect-control-csharp/ 是一个相当简单的例子,它可以做你需要做的最常见的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多