MVC4中来自JavaScript值的For循环

MVC4中来自JavaScript值的For循环,javascript,jquery,asp.net-mvc-4,Javascript,Jquery,Asp.net Mvc 4,如何在页面中创建转发器类型。在页面中,我有一个数量字段: @DisplayNameFor(x=>x.Quantity) @Html.ValidationMessageFor(x=>x.Quantity) @TextBoxFor(x=>x.Quantity,新的{@id=“txtQty”}) 当我想添加项目时,可能有几个相同的项目,只是不同的序列号,我需要弹出一个div,其中有重复的字段用于输入序列号: for (int I = 0; I < *****; I++) { <

如何在页面中创建转发器类型。在页面中,我有一个数量字段:


@DisplayNameFor(x=>x.Quantity)
@Html.ValidationMessageFor(x=>x.Quantity)
@TextBoxFor(x=>x.Quantity,新的{@id=“txtQty”})
当我想添加项目时,可能有几个相同的项目,只是不同的序列号,我需要弹出一个div,其中有重复的字段用于输入序列号:

for (int I = 0; I < *****; I++)
{
    <td>Serial Number:</td>
    <td>@Html.TextboxFor(x=>x.Quantity, new { @id = "txtQty" + 1})
}
我该怎么做?有更好的办法吗

这样做吗?我尝试这样做,但HTML模型语句中的“I”无法识别

 if (parseInt($("#txtQuantity").val()) > 0) {
            $("#divSerialNumbers").show();
            var html = "<table>";
            for (i = 1; i <= serialquantity; i++) {
                html += "<tr><td>Serial Number:" + @Html.TextAreaFor(x => x.SerialNumber, new { id = "sns" + i }) + "</td></tr>";
            }
            html += "</table>";
            $("#divSerialNumbers").html(html);
        }
if(parseInt($(“#txtQuantity”).val())>0){
$(“#divSerialNumbers”).show();
var html=“”;
对于(i=1;i x.SerialNumber,新的{id=“sns”+i})+”;
}
html+=“”;
$(“#divSerialNumbers”).html(html);
}

在服务器上解析Razor代码,然后将其发送到视图。Javascript是客户端代码,在浏览器收到视图之前不会执行。这行代码

@Html.TextAreaFor(x => x.SerialNumber, new { id = "sns" + i })
意味着在服务器上,您正试图生成一个
textarea
,并将
id
属性设置为一个包含尚未存在的javascript变量的值

甚至连这件事的意义都不清楚<代码>id属性在javascript中充当选择器。在发布数据时,重要的是
名称
属性,即使可以工作,也会生成重复的
名称
属性,这些属性无法绑定到回发时的模型集合属性

为了动态生成集合的html,您的
名称
属性需要一个索引器,例如
。动态创建html的选项包括使用helper,或者如中所示的纯客户端方法

如果您所做的只是发回一个字符串数组(序列号),那么您可以使用

var div = $("#divSerialNumbers"); // cache it
$('#Quantity').change(function() { // assumes you remove the pointless 'new { @id = "txtQty" }'
  var quantity = parseInt($(this).val()); // use $(this) - don't traverse the DOM all over again
  if (!isNan(quantity) && quantity > 0) { // must check for NAN
    // note it does not seem necessary to use a table, as opposed to simply adding 4 inputs to the div, but
    div.empty(); // clear existing contents
    var table = $('</table>');
    for (i = 1; i <= quantity; i++) {
      var input = $('<input>').attr('name', 'SerialNumber');
      var cell = $('</td>').append(input);
      var row = $('</tr>').append(cell);
      table.append(row);
    }
    div.append(table).show(); // add the table and display it
  }
})

现在还不清楚你想做什么。。。你想要几个文本框吗?您可以使用array,并制作TextBoxFor(x=>x.yourray[i]),如果我理解正确,并且您希望动态设置循环数,那么使用Razor是无法做到这一点的。您可以使用javascript克隆/复制包含标签和文本框的DOM部分,然后设置新的“id”属性。
var div = $("#divSerialNumbers"); // cache it
$('#Quantity').change(function() { // assumes you remove the pointless 'new { @id = "txtQty" }'
  var quantity = parseInt($(this).val()); // use $(this) - don't traverse the DOM all over again
  if (!isNan(quantity) && quantity > 0) { // must check for NAN
    // note it does not seem necessary to use a table, as opposed to simply adding 4 inputs to the div, but
    div.empty(); // clear existing contents
    var table = $('</table>');
    for (i = 1; i <= quantity; i++) {
      var input = $('<input>').attr('name', 'SerialNumber');
      var cell = $('</td>').append(input);
      var row = $('</tr>').append(cell);
      table.append(row);
    }
    div.append(table).show(); // add the table and display it
  }
})
public ActionResult Edit(string[] SerialNumber)