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)