我的 ID 都是一样的,使用 foreach 和 @Html.DropDownListFor



我正在努力使用我的MVC 5应用程序。我正在尝试根据我的模型创建一个表单。

该模型相当简单,为此,我将其完全简化为裸露

调查.cs只有1个住宿

public Dictionary<Answer, AnswerTemplate> QuestionAndAnswerTemplates { get; set; }

答.cs 只有 1 处房产

public string AnswerValue {get;set;}

答案模板.cs 有 2 个属性

public string ConstraintsCsv { get; set; }
public IEnumerable<SelectListItem> ConstraintsFroDropDownList
{
get
{
var result = new List<SelectListItem>();
var split = ConstraintsCsv?.Split(',');
foreach (var s in split)
{
result.Add(new SelectListItem() { Text = s });
}
return result;
}
}

最后是CSHTML(视图(

@model Survey
@using (Html.BeginForm())
{
foreach (var item in Model.QuestionAndAnswerTemplates)
{
@Html.DisplayFor(a => item.Key.Question)<br />
@Html.DropDownListFor(a => item.Key.AnswerValue, item.Value.ConstraintsFroDropDownList)
<br /><br />
}
<input type="submit" value="Save" />
}

Dictionary填充了 2 个项目,因此,我在浏览器中呈现的 HTML 上看到了 2 个DropDownLists。伟大!

问题是,当我检查渲染的HTML的源代码时,我得到以下内容

<select id="item_Key_AnswerValue" name="item.Key.AnswerValue">
<option>1</option>
<option>2</option>
<option>3</option>
</select>        <br /><br />
<select id="item_Key_AnswerValue" name="item.Key.AnswerValue">
<option>Yes</option>
<option>No</option>
</select>        <br /><br />

如您所见,每个ID都是一样的,name这是为什么呢?我希望能够单击"保存"按钮并拥有一个完全填充的模型。

控制器是

[HttpPost]
public ActionResult Survey(Survey model)
{
return View();//need to do something here
}

但是,model始终未填充(空值(。

我做错了什么?

在 razor 视图中编辑项目集合时,不要使用foreach而是使用简单的for循环。

所以代替:

foreach (var item in Model.QuestionAndAnswerTemplates)
{
@Html.DisplayFor(a => item.Key.Question)<br />
@Html.DropDownListFor(a => item.Key.AnswerValue, item.Value.ConstraintsFroDropDownList)
<br /><br />
}

使用这个:

for(var i = 0; i < Model.QuestionAndAnswerTemplates.Count(); i++)
{
@Html.DisplayFor(a => Model.QuestionAndAnswerTemplates[i].Key.Question)<br />
@Html.DropDownListFor(a => Model.QuestionAndAnswerTemplates[i].Key.AnswerValue, item.Value.ConstraintsFroDropDownList)
<br /><br />
}

像上面一样name然后每个select元素的属性都将绑定到模板在Model.QuestionAndAnswerTemplates中的位置。

最新更新