Asp.net mvc 从表单提交视图通过视图模型获取问题列表

Asp.net mvc 从表单提交视图通过视图模型获取问题列表,asp.net-mvc,asp.net-mvc-4,c#-4.0,razor,separation-of-concerns,Asp.net Mvc,Asp.net Mvc 4,C# 4.0,Razor,Separation Of Concerns,我将向视图模型中添加一个问题列表,该视图模型中包含该属性作为列表,并将其发送到视图。我可以执行foreach循环并在屏幕上显示所有问题,但当我单击表单上的提交并将视图模型发送到控制器问题列表时,我不确定如何将这些问题添加回视图模型 将列表添加到VM AddEditListingViewModel AELVM = new AddEditListingViewModel { ListingQuestions = new List<ListingDetai

我将向视图模型中添加一个问题列表,该视图模型中包含该属性作为列表,并将其发送到视图。我可以执行foreach循环并在屏幕上显示所有问题,但当我单击表单上的提交并将视图模型发送到控制器问题列表时,我不确定如何将这些问题添加回视图模型

将列表添加到VM

AddEditListingViewModel AELVM = new AddEditListingViewModel
        {
            ListingQuestions = new List<ListingDetailQuestionViewModel>(),
            States = states,
            Cities = cities,
            Agents = agents,
        };

        foreach (ListingDetailQuestionViewModel question in questions)
        {
            ListingDetailQuestionViewModel LDQVM = new ListingDetailQuestionViewModel
            {
                QuestionGuid = question.QuestionGuid,
                QuestionNumber = question.QuestionNumber,
                Question = question.Question,
                QuestionSideNotes = question.QuestionSideNotes
            };

            AELVM.ListingQuestions.Add(LDQVM);
        }

        return View("AddNewListing", AELVM);
AddEditListingViewModel AELVM=新的AddEditListingViewModel
{
ListingQuestions=新列表(),
国家=国家,
城市=城市,
代理=代理,
};
foreach(列出详细问题视图问题中的模型问题)
{
ListingDetailQuestionViewModel LDQVM=新ListingDetailQuestionViewModel
{
QuestionGuid=question.QuestionGuid,
QuestionNumber=question.QuestionNumber,
问题,
QuestionSideNotes=question.QuestionSideNotes
};
AELVM.ListingQuestions.Add(LDQVM);
}
返回视图(“AddNewListing”,AELVM);
在视图中

@foreach (ListingDetailQuestionViewModel value in Model.ListingQuestions)
                    {
                        @Html.Label(value.Question + "?", new {Id = value.QuestionGuid})
                        @Html.Label("Answer: ")@Html.TextBox("Answer", "", new {Id = value.QuestionGuid})
                        <br/>
                    }
@foreach(模型中的ListingDetailQuestionViewModel值。ListingQuestions)
{
@Label(value.Question+“?”,新的{Id=value.QuestionGuid})
@Label(“Answer:”)@Html.TextBox(“Answer”,“new{Id=value.QuestionGuid})

}
视图是此视图模型的强类型视图。
我可以打开列表并查看值,但当表单提交时,所有问题都为空。

阅读模型绑定到列表-

您需要使用扩展方法的帮助器来生成具有索引名称的html元素

@for (var i = 0; i < Model.ListingQuestions.Count; i++)
{
    @Html.HiddenFor(m => Model.ListingQuestions[i].QuestionGuid);
    @Html.LabelFor(m => Model.ListingQuestions[i].Answer);
    @Html.TextBoxFor(m => Model.ListingQuestions[i].Answer)
for(var i=0;iModel.ListingQuestions[i].QuestionGuid); @Html.labelfar(m=>Model.ListingQuestions[i]。答案); @Html.TextBoxFor(m=>Model.ListingQuestions[i].答案) 看看HTML,这应该会产生一些类似于

<input name="ListingQuestions[0].QuestionGuid" type="hidden" value="..." />
....label
<input name="ListingQuestions[0].Answer" type="text" value="" />

……标签

要将模型中的值传回控制器,它必须包含在for助手(textboxfor、dropdownlistfor等)中。它是模型中的一个列表,我不知道如何打开该列表并将其保留在模型中。这是最后的代码。@for(var i=0;iModel.ListingQuestions[i].QuestionGuid)@Html.HiddenFor(m=>Model.ListingQuestions[i].Question)@Html.DisplayFor(m=>Model.ListingQuestions[i].Question)
@Html.TextBoxFor(m=>Model.ListingQuestions[i].Answers.Answer)