如何创建MVC3 DropDownListFor仅使用部分模型

时间:2012-08-27 15:19:30

标签: c# asp.net-mvc razor html.dropdownlistfor

我正在创建一个包含多种对象类型的问题/答案页面(单选按钮,下拉列表,复选框)。

Id  QuestionText    AnswerId    AnswerText      ObjectType
1   text one        1           Personal        DropDown
1   text two        2           Business        DropDown
2   Text three      3           Direct Deposit  CheckBox
2   text four       4           Some Answer     CheckBox

我有一个模型,其中包含所有问题,答案和对象类型的列表。

如何填充(例如)dropdownlistfor只列出两个项目,然后填充一组相关的复选框,然后填充一组相关的单选按钮?

dropdownlistfor看起来在模型上进行枚举。

我的代码不起作用:

@if (Model != null)
{
   for (int i = 0; i < Model.Count; i++)
   {
      if (Model[i].AdditionalQuestionTypeId == 1)
      {
          @Html.DropDownListFor(model => model[i].AdditionalQuestionId, ((IEnumerable<Curo.Web.InterAcct.Models.AdditionalQuestionAnswerModel>)Model[i].AnswerText)
            .Select(option => new SelectListItem
            {
                Text = (option == null ? "None" : option.Description),
                Value = option.Id.ToString(),
                Selected = (Model != null) && (option.Id == Model[i].AdditionalQuestionId)
            }), "Choose...")

2 个答案:

答案 0 :(得分:2)

用一堆逻辑堵塞你的观点并不是最好的主意。这实际上不是MVC的理想方法。

在控制器中使用此逻辑,而不是视图。 在控制器中为所需方案创建所需的选项,并将选项设置为property上的Model。然后,您的视图将只绑定到property

public class MyModel {
    public string MyValue { get; set;}
    public List<SelectListItem>  Options { get; set; }
}

public ActionResult MyAction(){

    MyModel model = new MyModel();
    // populate options here
    model.Options = new List<SelectListItem>();
    return View(model);
}

然后你的观点:

@Html.DropDownListFor(m => m.MyValue, m => m.Options)

答案 1 :(得分:0)

从您的代码中很难说出来,但我认为您几乎就在那里。您需要使用IEnumerable执行dropdownlistfor语句,但您的语法似乎已关闭:

@Html.DropDownListFor(model => model[i].AdditionalQuestionId, new SelectList(Model.Answers.Where(f=>**Some code to select what values you want**), "Id", "Description", Model[i].AdditionalQuestionId))

这会有助于查看错误消息,但我认为此时只是语法。