0

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

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...")
4

2 回答 2

2

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

在您的控制器而不是视图中使用此逻辑。在控制器中为所需场景创建选项,并将选项设置propertyModel. 然后您的视图将简单地绑定到该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)
于 2012-08-27T15:35:59.027 回答
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))

看到一条错误消息会有所帮助,但我认为此时它只是语法。

于 2012-08-27T15:34:17.743 回答