C#MVC - Razor Complex嵌套表单提交没有约束力

时间:2013-11-18 05:04:13

标签: c# asp.net-mvc razor form-submit nested-forms

长时间潜伏......第一次提问者...... 我有一个复杂的表单,在提交时返回null。基本上我正在尝试构建一个数据库驱动的表单。

表单包含部分或问题的列表 一节包含另一部分或问题的列表

Model 1:
public FormViewModel {
    public List<FormSetsViewModel> formSets { get; set; }
}

Model 2: 
public FormSetsViewModel{
    QAViewModel questionAnswerViewModel { get; set; }
    SectionViewModel sectionViewModel { get; set; }
    bool isQuestion { get; set; }
    bool isSection { get; set; }
}

Model 3:
public SectionViewModel {
    public List<FormSectionQuestionsViewModel> formSectionQuestions { get; set; }
}

Model 4:
public FormSectionQuestionsViewModel {
    public QuestionAnswerViewModel questionAnswers;
    public SectionViewModel childSection;
    int orderNumber;
}

Model 5: 
public QAViewModel {
    int id { get; set; }
    string answer { get; set; }
    string question { get; set;}
}

意见如下:

FormViewModel.cshtml
@model FormViewModel
@using (Html.BeginForm("Save", "Forms"))
{
    <div class="row">
        @Html.EditorFor(model => model.formSetsViewModels)
    </div>

    <div class="controls">
        <input type="submit" value="Confirm" class="button" name="save" />
    </div>
}

@model FormSetsViewModel
<div class="control-group">
    @if (Model.isQuestion)
    {
        @Html.EditorFor(m => m.questionViewModel);
    }
    else
    {
        @Html.EditorFor(m => m.sectionViewModel);
    }
</div>

SectionViewModel.cshtml
@model SectionViewModel
@Html.EditorFor(m => m.formSectionQuestions)

FormSectionQuestionsViewModel.cshtml
@model FormSectionQuestionsViewModel
@if (Model.childSection != null)
{
    @Html.EditorFor(m => m.childSection)
}
else
{
    @Html.EditorFor(m => m.questionAnswers)
}

QAViewModel.cshtml
@model QAViewModel

<p><div class="question-text-edit">@Html.Raw(Model.questionText)</div>
@Html.TextAreaFor(m => m.answer, new { style = "width: 90%; height: 80px;" })

控制器:

[HttpPost]
public ActionResult Save(int caseID, List<FormSetsViewModel> formSets = null)
{
    return Index(caseID);
}

该视图非常适合作为数据库驱动的表单。但是,当我提交表单时,似乎表单集无法绑定,并返回null。

从Html中,它创建了一个这样的输入:

<input id="formSetsViewModels_d762713a-7a2f-497a-9417-4c6e91d33cb8__sectionViewModel_formSectionQuestions_48e738da-10d3-4518-be59-2493e2b7a7cc__questionAnswers_answer" name="formSetsViewModels[d762713a-7a2f-497a-9417-4c6e91d33cb8].sectionViewModel.formSectionQuestions[48e738da-10d3-4518-be59-2493e2b7a7cc].questionAnswers.answer" type="text" value="">

1 个答案:

答案 0 :(得分:2)

终于找到了答案!

FormSetsViewModel的变量名称
public ActionResult Save(int caseID, List<FormSetsViewModel> formSets = null)

需要formSetsViewModel才能使模型绑定。

另一个原因是,类中的一些公共变量没有{ get; set; }方法。 我们想要绑定的所有变量都需要{ get; set; }方法。添加它可以解决问题。