0

我有一个表格,用户可以在其中添加一个条目,一旦用户完成,他们就可以添加另一个条目。

在他们添加条目后,他们可以再次将其删除。这就是问题发生的地方。这是一个例子

行动:

Public ActionResult Submit(List<String> Names)
{
   //DO STUFF
}

当他们添加一个条目时,它将获取前一个条目的索引并为其添加一个隐藏字段,所以最后它看起来像这样:

HTML:

 <input type="hidden" name='Names[0]' value='John'/>
 <input type='hidden' name='Names[1]' value='Peter' />
 <input type='hidden' name='Names[2]  value='David' />

当我提交此文件时,它将正确映射所有名称。问题是用户可以在提交之前添加其中一个名称后删除它。如果他们删除值为“Peter”的输入,则 html 将如下所示

删除后的 HTML:

 <input type="hidden" name='Names[0]' value='John'/>
 <input type='hidden' name='Names[2]  value='David' />

当它被提交时,只有值为“John”的输入才会被映射。

有谁知道如何在不编写将重做 html 中所有索引的 jquery 函数的情况下解决此问题?我正在寻找一种解决方案,可以为绑定、覆盖或其他内容添加服务器端。我不想使用 jquery 的原因是因为我有多个具有此类功能的页面,并且为每个页面执行此操作将非常耗时。

** * **编辑* ** * ***

上面的代码只是一个示例,我尝试绑定的模型之一如下所示:

public class Product {
   public string Code {get;set;}
   public string Name {get;set;}
   public int Quantity {get;set;}
   public decimal Price {get;set;}

}

然后显然在我的行动中

public ActionResult Submit(List<namespace.Product> Products)
{
  //do stuff
}
4

4 回答 4

1

您可以尝试使用 Ajax jQuery 更新模型,这可能更容易。

您可以添加一个输入按钮,例如:

<input type="button" value="Save/Update" id="saveUpdate" />
//Other HtmlCode

//Now script code
<script>
$(function(){

 $("#saveUpdate").click(function({
      $.ajax({
         url: '/myController/GetDataForInvoiceNumber',
         type: 'POST',
         data: JSON.stringify(requestData),
         dataType: 'json',
         contentType: 'application/json; charset=utf-8',
         error: function (xhr) {
            alert('Error: ' + xhr.statusText);
         },
         success: function (result) {
            CheckIfInvoiceFound(result);
         },
         async: true,
         processData: false
      });

 });

});
</script>

//Contoller
Public ActionResult Submit(Products requestData)
{
   //DO STUFF
}

这可以工作

于 2013-11-08T20:41:34.460 回答
0

我相信你很久以前就知道了,但看起来你有一个错字。您的示例在第二行使用“值”而不是“值” values='David' />

于 2013-11-14T15:59:20.977 回答
0

您不需要索引即可向控制器提交列表。

Public ActionResult Submit(string[] Names)
{
   //DO STUFF
}

然后只需更改Names[]为 just ,即使您删除项目Names,它仍会映射到参数。Names

<input type="hidden" name='Names' value='John'/>
<input type='hidden' name='Names`  values='David' />
于 2013-11-08T13:49:12.317 回答
0

感谢 Zabavsky 的评论,我找到了我正在寻找的解决方案。

我使用了非顺序索引。

这是一个例子:

行动:

 public ActionResult Create(List<namespace.Product> Products)
 {
    //do stuff
 }

模型:

public class Product {
   public string Code {get;set;}
   public string Name {get;set;}
   public int Quantity {get;set;}
   public decimal Price {get;set;}

}

在我的表单中,html 将如下所示:

<input type='hidden' name='Products.Index' value='1'/>
<input type='hidden' name='Products[1].Code' value='xyz' />
<input type='hidden' name='Products[1].Name' value='Shirt' />
<input type='hidden' name='Products[1].Quantity' value='5'/>
<input type='hidden' name='Products[1].Price' value='50'/>

<input type='hidden' name='Products.Index' value='7'/>
<input type='hidden' name='Products[7].Code' value='zxy' />
<input type='hidden' name='Products[7].Name' value='Pants' />
<input type='hidden' name='Products[7].Quantity' value='8'/>
<input type='hidden' name='Products[7].Price' value='70'/>

<input type='hidden' name='Products.Index' value='foo'/>
<input type='hidden' name='Products[foo].Code' value='1234' />
<input type='hidden' name='Products[foo].Name' value='Shoes' />
<input type='hidden' name='Products[foo].Quantity' value='2'/>
<input type='hidden' name='Products[foo].Price' value='100'/>

所有这些都将正确绑定。我必须添加的是:

<input type='hidden' name='Products.Index' value='1'/>

所有索引值都需要唯一才能使其工作,因此只需几行 jquery 我就能够实现这一点。

更多信息可以在这里找到:模型绑定到列表

于 2013-11-15T07:02:11.067 回答