ASP.NET MVC フォームをポップアップでいくつかのコントロールと部分 (データ グリッド) で独自のモデルを使用しています。ここにポップアップがあります:
<div id="AddEditDialog" class="none">
@using (Ajax.BeginForm("Save", "Templates", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "AddEditPlaceHolder",
OnSuccess = "OnSaveSuccess",
HttpMethod = "Post"
}))
{
<div>
<div id="AddEditPlaceHolder"></div>
<div id="PopupButtons" class="btn-holder-centered">
<input type="submit" value="Save" name="SaveButton" />
<input type="button" value="Cancel" name="SaveCancelButton" id="CancelEditHandler" />
</div>
</div>
}
</div>
js を介して AddEditPlaceHolder でレンダリングするフォームは次のとおりです。
@model TemplatesViewModel
<div class="form-field-plain overflow">
<div class="forRow narRow float-left">
@Html.LabelFor(x => x.Revocable)
@Html.CheckBoxFor(x => x.Revocable)
</div>
</div>
<div class="form-field-plain overflow">
<div class="forRow narRow float-left">
@Html.LabelFor(x => x.HtmlTemplate)
@Html.TextAreaFor(x => x.HtmlTemplate)
</div>
</div>
@Html.Partial("_VariablesGridView", Model.Variables)
_VariablesGridView.cshtml:
@model List<TemplateVariableViewModel>
<table id="TemplateVariablesGrid">
<thead>
<tr>
<td>Tag/Code</td>
<td>Prompt</td>
<td>Action</td>
</tr>
</thead>
<tbody>
@foreach (var i in Model)
{
<tr>
<td>
@Html.TextBox("txtTag", @i.Tag, new {})
</td>
<td>
@Html.TextBox("txtPrompt", @i.Prompt, new { })
</td>
<td>
@Html.HiddenFor(x => x.First(s => s.Id == @i.Id).Id)
<label class="delete-variable">delete</label>
</td>
</tr>
}
</tbody>
</table>
<br />
<input type="button" name="btnAddTemplateVariable" value="add new variable"/>
<br />
私の問題は次のとおりです。コントローラーの「フォームを保存」メソッド public ActionResult Save(TemplateViewModel model)
で、モデルにはフォームからのすべてのデータが含まれていますが、TemplateViewModel.Variables は空です
そこを埋める方法はありますか?
モデル:
public class TemplateViewModel
{
public int Id { get; set; }
public string HtmlTemplate { get; set; }
public List<TemplateVariableViewModel> Variables { get; set; }
}
public class TemplateVariableViewModel
{
public int Id { get; set; }
public string Tag { get; set; }
public string Prompt { get; set; }
}