コンテンツがフォームに追加されるたびに新しい行を追加するフォームをテーブル内に作成しようとしています。これが私のコードです、そしてそれから私は問題が何であるかを教えます。
@{
//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関数でを呼び出すと、関数の外に出ると変数の変更は保存されません。したがって、Model.Questionsオブジェクトの最初のアイテム用の最初のHtml.TextBoxForの後に、私が望むように新しいテキストボックスを作成しますが、リストで変更するアイテムをインクリメントする代わりに、すべてを編集するだけです。リストの2番目の項目。
奇妙なことに、私が@(i++)
内部を行うとしたら$(document).ready()
、それはうまくいくでしょう。
変数を正しくインクリメントする方法について何かアイデアはありますか?Razor変数とJavascriptの混合に関しては、私にはわからないことがあると確信しています。