我正在创建一个包含多种对象类型的问题/答案页面(单选按钮,下拉列表,复选框)。
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...")
答案 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))
这会有助于查看错误消息,但我认为此时只是语法。