我正在尝试在表格中创建一个表格,每次将内容添加到表格时都会添加一个新行。这是我的代码,然后我会告诉你问题是什么。
@{
//Declare the i variable
var i = 0;
}
@using (Html.BeginForm())
{
<table>
<tr>
<th>
</th>
<th>
Question
</th>
</tr>
<tr id="@(i+1)">
<td class="QuestionNum">
@(i+1))
</td>
//This is the cell with the Form field.
<td>
@Html.TextBoxFor(m => m.Questions[i].Question, new { @class = "QuestionBox Last" })
</td>
</tr>
</table>
}
<script>
$(document).ready(function () {
SetUpNewLine($('.QuestionBox'));
});
function SetUpNewLine(obj) {
obj.bind('keyup paste', function () {
if ($(this).val() != "") {
if ($(this).hasClass("Last")) {
//This is the line that isn't working.
@(i++)
$(this).parents('table').append('<tr id="@(i+1)"><td class="QuestionNum">@(i+1))</td><td>@Html.TextBoxFor(m => m.Questions[i], new { @class = "QuestionBox Last", style="width:100%;" })</td></tr>');
$(this).removeClass('Last');
SetUpNewLine($('.Last'));
}
});
}
</script>
所以,这段代码第一次工作,但是@(i++)
在Javascript函数中调用时,一旦你离开函数,它就不会保存变量更改。所以在第一个 Html.TextBoxFor 之后,它是 Model.Questions 对象中的第一个项目,它确实像我想要的那样创建了一个新的文本框,但是它没有增加它在 List 中更改的项目,而是让它们都只是编辑列表中的第二项。
奇怪的是,如果我在@(i++)
里面做$(document).ready()
,它会工作得很好。
关于如何正确增加变量的任何想法?我敢肯定,在混合 Razor 变量和 Javascript 时,有一些我不知道的事情。