在ASP.NET中命名组输入和检索控制器中的值

本文关键字:检索 控制器 输入 ASP NET | 更新日期: 2023-09-27 18:18:35

我有一个表,它的行是用jQuery动态创建的。我可以添加或删除行,所以当所有字段都准备好了,我就提交它。由于行是在任何发布之前创建的,我如何才能正确地命名它们,以便以后在控制器操作中轻松检索它们的值,如创建?假定每一行都是"一个对象",或者至少每一行都是一个数组。

在ruby中,只需通过向name=属性添加[]来完成工作,不确定是否ASP。. NET是可能的

这是用于创建行的脚本:

function add_row() {
  var detalle = $('#detail');
  var index = $("#detail tbody").children("tr").length;
  var newRow = '<tr>' +
    '<td style="display:none"><input name="Detalle.Index" type="hidden" value="' + index + '" /></td>' +
    '<td data-title="Quantity">' +
    '<div class="input-group">' +
    '<span class="input-group-addon"></span>' +
    '<input class="form-control" type="number" aria-label="Quantity" name="Detail['+ index +'].quantity" id="Detail_' + index + '__quantity"  step="0.001" min="0.000">' +
    '</div>' +
    '</td>' +
    '<td data-title="Price" >' +
    '<div class="input-group">' +
    '<span class="input-group-addon">$</span>' +
    '<input type="number" class="form-control" aria-label="Price" name="Detail['+ index +'].price" id="Detail_' + index + '__price" step="0.001" min="0.000" required="true">' +
    '</div>' +
    '</td>' +
    '<td data-title=""><button type="button" class="btn btn-danger btn-sm" onclick="delete_row(this)">Cancel</button></td>' +
    '</tr>';
  detail.append(newRow);
}

在控制器中,我可以访问请求与Request.Form["Detail[0].price"]获得一个特定的值,但是我不能够如何获得行的总数来创建一个循环,并获得这样的值:Detail[i].inputname

在ASP.NET中命名组输入和检索控制器中的值

而不是使用Request.Form[".."]来获取表单值,使用MVC强大的模型绑定功能并直接绑定到您的模型。

根据脚本中的代码,你有一个名为Detail的属性的主模型,这是一个具有属性quantityprice的复杂对象的集合,所以你的方法可以是

public ActionResult Edit(YourMainModel model)

model.Detail的值将被正确地绑定。

然而,你的脚本中有两个错误,这将阻止绑定到模型

首先是隐藏输入的不正确的name属性。必须是

<input name="Detail.Index" type="hidden" value="' + index + '" />

not name="Detalle.Index"

第二个是索引器是基于表中的行数,这可能导致重复的索引器。如果您从一个空表开始并添加3个项目,那么最后一个项目的索引值将为2。如果您随后删除了第一个,然后添加了另一个,那么它的索引值也将是2,从而导致绑定失败。您需要确保索引器是唯一的。实现这一点的一种方法是使用

var index = (new Date()).getTime();