1

凭借我的 ASP.NET WebForms 经验,这是我的第一个 MVC 项目。
这是我认为机制不允许的问题,但我可能是错的。
在 aDropDownListFor中拥有 a@foreach并不是那么微不足道。
首先,下拉菜单没有选择我传递给它的值(m => question.Answer)——注意下图中它们都显示了No Answer,因为它没有选择我加载它的正确值。
其次,由于它们最终都具有相同的表单字段名称,控制器如何将它们分离回相应的 List<> 中?
我一直在看这个一个小时并搜索了一个类似的例子,但我找不到任何东西。
什么是不是硬编码黑客或解决方法的好解决方案?

模型:

public List<SelectListItem> PossibleAnswers
{
    get
    {
    return new List<SelectListItem>() 
    { 
        new SelectListItem() { Text = "No Answer", Value = "0" }, 
        new SelectListItem() { Text = "Very Bad", Value = "1" }, 
        new SelectListItem() { Text = "Bad", Value = "2" }, 
        new SelectListItem() { Text = "Average", Value = "3" }, 
        new SelectListItem() { Text = "Good", Value = "4" },
        new SelectListItem() { Text = "Very Good", Value = "5" } 
    };
    }
}
public enum SurveyAnswer
{
    NoAnswer,
    VeryBad,
    Bad,
    Average,
    Good,
    VeryGood
}
public class SurveyQuestionClass
{
    public int ID { get; set; }
    public string Question { get; set; }
    public SurveyAnswer Answer { get; set; }
}
public List<SurveyQuestionClass> QuestionsAnswers { get; set; }

看法:

@foreach (var question in Model.QuestionsAnswers)
{
    <tr>
        <td>
            @Html.DropDownListFor(m => question.Answer, Model.PossibleAnswers, new { style = "font-size: small;" })
        </td>
        <td>
            @Html.Raw(question.Question)
        </td>
    </tr>
}

它看起来像这样:

在此处输入图像描述

4

1 回答 1

1

您应该使用编辑器模板

这可以应用如下:

将您可能的答案移至 SurveyQuestionClass。然后你可以像这样指定一个编辑器模板:

@model SurveyQuestionClass

<tr>
    <td>
        @Html.DropDownListFor(m => m.Answer, Model.PossibleAnswers, new { style = "font-size: small;" })
    </td>
    <td>
        @Html.Raw(Model.Question)
    </td>
</tr>

Editortemplates 是部分视图,应放置在您的视图文件夹中的 EditorTemplates 文件夹中。因此,如果这适用于您的主视图,则模板应位于:views > Home > EditorTemplates。

编辑器模板应命名为 type.cshtml。所以在你的情况下:SurveyQuestionClass.cshtml

在您看来,这很简单:

@Html.EditorFor(m => m.QuestionsAnswers)

当您将模型返回到控制器功能中时,所有问题和答案都将绑定到 QuestionsAnswers 列表。遍历列表并阅读 SurveyQuestionClass.Answer 属性,将为您提供问题答案

于 2013-09-14T07:18:21.557 回答