【问题标题】:Getting the list of questions back through the view model from the view on form submit从表单提交的视图中通过视图模型获取问题列表
【发布时间】:2013-11-22 00:22:07
【问题描述】:

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

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

【问题讨论】:

  • 要将模型中的值传递回控制器,它必须包含在 for 帮助器(textboxfor、dropdownlistfor 等)中
  • 这是模型中的一个列表,我不知道如何打开那个列表并仍然保留在模型中。

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


【解决方案1】:

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

你需要使用 helper For 扩展方法来生成带有索引名称的 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="" />

【讨论】:

  • 这是最终代码。 @for (var i = 0; i Model.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)
    }跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 2019-12-21
相关资源
最近更新 更多