gpt4 book ai didi

C# MVC - Razor 复杂嵌套表单提交不绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:26 25 4
gpt4 key购买 nike

长期潜伏...第一次提问...我有一个复杂的表单,在提交时返回 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;" })

Controller :

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

该 View 作为数据库驱动的表单非常有用。但是,当我提交表单时,表单集似乎无法绑定(bind),并返回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="">

最佳答案

终于找到答案了!

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

需要 formSetsViewModel 才能绑定(bind)模型。

另一件事是,类中的一些公共(public)变量没有{ get;放; } 方法。我们想要绑定(bind)的所有变量都需要 { get;放; } 方法。添加这个可以解决问题。

关于C# MVC - Razor 复杂嵌套表单提交不绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20040447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com