从表单提交视图中通过视图模型返回问题列表

时间:2013-11-22 00:22:08

标签: asp.net-mvc asp.net-mvc-4 c#-4.0 razor separation-of-concerns

我将一个问题列表添加到视图模型中,该视图模型将该属性作为列表并将其发送到视图。我可以做一个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);

在视图中。

@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/>
                    }

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

1 个答案:

答案 0 :(得分:0)

阅读模型绑定到列表 - http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

您需要使用帮助器对于扩展方法来生成具有索引名称的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)

看一下HTML,这应该会产生类似

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