1

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; }
}
4

1 に答える 1