型号1:
public class Model1
{
public int Id { get; set; }
public int VariantId { get; set; }
public string Name { get; set; }
public string Language { get; set; }
public IList<Model2> ListModel2{ get; set; }
public VmSysVariantResource()
{
ListModel2=new List<Model2>();
}
}
模型2:
public class Model2
{
public int Id { get; set; }
public int ParamterId { get; set; }
public int ValueId { get; set; }
[Required]
public string SelectedValue { get; set; }
public string ParameterName { get; set; }
public IList<PossibleValue> Values { get; set; }
public IList<SelectListItem> ValuesSelectListItem
{
get
{
var list = (from item in Values
select new SelectListItem()
{
Text = item.ValueName,
Value = item.Id
}).ToList();
return list;
}
set { }
}
}
PossibleValue:
public class PossibleValue
{
public int Id { get; set; }
public string ValueName { get; set; }
}
现在解释一下我想做什么: 假设我们有一个模型“Model1”。该模型具有Model2列表。 Model2包含ParameterName和possibleValues列表。 现在我有这样的形式:
@using (Ajax.BeginForm("Action", "Controller", null,
new AjaxOptions
{
HttpMethod = "POST"
}))
{
<table class="sample" style="margin: 0 auto; width: 400px">
<tr>
<td>
@Resource.Name:
</td>
<td> @Html.TextBoxFor(c => c.Name)
</td>
</tr>
@foreach (var item in Model.ParamtersToValue)
{
<tr>
<td>
@item.Parameter:
</td>
<td>
@Html.DropDownList("ParamtersToValue", @item.ValuesSelectListItem)
</td>
</tr>
}
</table>
<input type="submit" value="Submit"/>
}
在控制器中的post方法中,我想获得带有ListModel2列表的Model1。 这是我的帖子方法:
[HttpPost]
public ActionResult MyAction(Model1 obj)
{ }
我应该使用ListModel2获取post方法Model1,它将包含从下拉列表中选择的SelectedValue,但我不知道如何在foreach块中构建下拉列表以强制模型绑定工作。 任何建议将不胜感激。谢谢..
答案 0 :(得分:0)
默认模型绑定器适用于索引。因此,要使模型绑定,请将foreach
循环更改为for
循环,并使用索引渲染控件。像这样:
@for (int i = 0; i < Model.ParamtersToValue.Count; i++) {
@* .. stuff here *@
<td>
@Html.DropDownListFor(x => Model.ParametersToValue[i], Model.ParametersToValue[i].ValuesSelectListItem)
</td>
@* .. stuff here *@
}
这将导致元素名称,例如[0].ParametersToValue
,[1].ParametersToValue
等。模型绑定器将按照出现的顺序将它们绑定到您选择的可枚举中。