0

我正在开发一个 Web 应用程序(使用 ASP.NET 2.0 (C#) 和 jQuery)

在我的应用程序中,我们有一个界面,我们的员工可以使用该界面输入公司的记录。我们提供了包含基本字段、公司名称、联系人、电话等的界面。现在您知道有些公司有自己的分支机构,有些公司很少(1 到 10 个),有些则有很多(100-200)个分支机构。我们还使用 jQuery 提供了一个动态界面,它允许我们的员工根据特定公司拥有的分支机构数量添加分支机构。

另外,我们使用了 jQuery 的 append 函数作为 ..

$("#branches").append("branch html fields text liek a html input field with id 'Namebranch1' ");

现在,通过添加,我们还提供了一个带有每个分支字段的按钮,分别用于删除该特定分支。为了删除我用过

$("#branch1").remove()

比方说,我添加了5个分支,然后在提交之前,我觉得3号分支不需要输入,所以我删除了那个分支数据。所以添加和删除的过程如下,我们添加了

1,2,3,4,5

然后,我们删除了第三个分支,现在我们有了

1,2,4,5

现在我们有 4 个元素,所以每当我的用户添加或删除一个分支时,我分别从 javascript 变量中添加 1 和减去 1。然后在隐藏字段中输入该变量,这样当用户提交数据时,我将获得正确的计数,即用户如何添加任何分支,并根据此计数,我知道我有多少次必须运行循环以分别捕获所有分支数据。

但问题是当用户提交表单时,我正在运行循环 4 次,这意味着,我将获得 1,2 和 4 个分支的数据,但是当循环完成 4 个循环时,循环将停止,第 5 个分支的数据这实际上是 4 将丢失。因为当用户提交表单时将发布的元素为(branchName5、branchTitle5 等)

我希望你们明白我需要什么?请告诉我这个问题的一些合乎逻辑的解决方案。

谢谢

4

2 回答 2

1

摆脱隐藏的计数器变量,只需遍历 Request.Form.Keys 寻找分支*。然后,您将只处理以分支开头的任何表单变量。

class Branch { public string Name; public string Title; }

void OnLoad(EventArgs e) {
   base.OnLoad(e);

   var branches = new Dictionary<int, Branch>();
   foreach (string key in Request.Form.Keys) {
     if (!key.StartsWith("branch")) continue;

     int id;
     if (key.StartsWith("branchTitle")) {
       id = int.Parse(key.Substring("branchTitle".Length));
       branches.Ensure(i).Title = Request.Form[key];
     } else if (key.StartsWith("branchName")) {
       id = int.Parse(key.Substring("branchName".Length));
       branches.Ensure(i).Name = Request.Form[key];
     }            
   }
}

// Ensure extension method
T Ensure<K, T>(this Dictionary<K, T> d, K key) where T:new {
   if (!d.ContainsKey(key)) {
      d.Add(key, new T());
   }
   return d[key];
}
于 2009-01-25T15:13:21.573 回答
0

也许这是一个线索?在提交做....

$('#branches').each( function (i) { this.id = 'branch' + i } );
于 2009-01-25T14:33:11.013 回答