したがって、IncomeDeclaration の複雑なフォームがあります。
IncomeDeclaration が関連する各アクティビティのテキストフィールド GrossIncome を表示する予定です...これはすべてサーバー上で行われ、問題なく動作します....問題は. ユーザーはまた、オンザフライでアクティビティを追加できる必要があります..javascriptを使用して...ユーザーが[アクティビティの追加]をクリックすると、ドロップダウンとテキストフィールドがアクティビティリストの下部に追加される必要があります...私がこれまでに得たものは次のとおりです
<tbody id="activities">
@Html.EditorFor(model => model.income.EconomicActivityIncomeDeclarations)
</tbody>
</table>
<a href="#" id="add_activity">Agregar Otra Actividad</a>
</fieldset>
<script type="text/javascript">
$("#add_activity").click(function () {
$.getJSON('/IncomeDeclarations/GetEconomicActivities', function (data) {
var select = new Select();
var data = new Array();
for (var i = 0; i < data.length; i++) {
var option = new Option(data[i]["name"], data[i]["i"])
//should do something here
}
//should call the template and append to #activities
});
});
</script>
<script id="template" type="text/x-jquery-tmpl">
<tr>
<td><select name="income.EconomicActivityIncomeDeclarations[${SomeNumber}].EconomicActivityId">
${MyOptions}
</select></td>
<td><input type="text" name="income.EconomicActivityIncomeDeclarations[${SomeNumber}].GrossIncome" /></td>>
</tr>
</script>
}
select と text_field の両方の name 属性は、これが機能するための鍵です...そうしないと、モデルバインディングが機能しません... SomeNumber 変数が new Date.GetTime() モデルに設定されている場合、バインディングはうまく機能するはずです。 ..
私は実際にこれにajaxが必要だとは思いませんが、それは別のトピックです..私はajaxなしでこれを行う方法を考え出していません...今、テンプレートを機能させ、フォーム要素をリスト。