我对此进行了一些研究,并没有找到一个能够处理类似情况或MVC3的答案。在我正在使用的ViewModel中,我有一个单独模型的列表(List<AgentId>
,它是AgentId
模型的列表)。
在此控制器的Create
页面中,我需要一个输入部分,用于将5个项目添加到此列表中。但是,在页面加载之前,我收到此错误消息:
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'BankListAgentId[0].StateCode'.
这是我正在使用的ViewModel:
public class BankListViewModel
{
public int ID { get; set; }
public string ContentTypeID1 { get; set; }
public string CreatedBy { get; set; }
public string MANonresBizNY { get; set; }
public string LastChangeOperator { get; set; }
public Nullable<System.DateTime> LastChangeDate { get; set; }
public List<BankListAgentId> BankListAgentId { get; set; }
public List<BankListStateCode> BankListStateCode { get; set; }
}
以下是视图中有问题的部分:
<fieldset>
<legend>Stat(s) Fixed</legend>
<table>
<th>State Code</th>
<th>Agent ID</th>
<th></th>
<tr>
<td>
@Html.DropDownListFor(model => model.BankListAgentId[0].StateCode,
(SelectList)ViewBag.StateCode, " ")
</td>
<td>
@Html.EditorFor(model => model.BankListAgentId[0].AgentId)
@Html.ValidationMessageFor(model => model.BankListAgentId[0].AgentId)
</td>
</tr>
<tr>
<td>
@Html.DropDownListFor(model => model.BankListAgentId[1].StateCode,
(SelectList)ViewBag.StateCode, " ")
</td>
<td>
@Html.EditorFor(model => model.BankListAgentId[1].AgentId)
@Html.ValidationMessageFor(model => model.BankListAgentId[1].AgentId)
</td>
<td id="plus2" class="more" onclick="MoreCompanies('3');">+</td>
</tr>
</table>
</fieldset>
答案 0 :(得分:2)
我相信@Html.DropDownListFor()
期待IEnumerable<SelectListItem>
,您可以通过以下方式绑定它:
在ViewModel中:
public class BankListViewModel
{
public string StateCode { get; set; }
[Display(Name = "State Code")]
public IEnumerable<SelectListItem> BankListStateCode { get; set; }
// ... other properties here
}
在Controller中加载数据:
[HttpGet]
public ActionResult Create()
{
var model = new BankListViewModel()
{
// load the values from a datasource of your choice, this one here is manual ...
BankListStateCode = new List<SelectListItem>
{
new SelectListItem
{
Selected = false,
Text ="Oh well...",
Value="1"
}
}
};
return View("Create", model);
}
然后在View中绑定它:
@Html.LabelFor(model => model.BankListStateCode)
@Html.DropDownListFor(model => model.StateCode, Model.BankListStateCode)
我希望这会有所帮助。如果您需要澄清,请告诉我。
答案 1 :(得分:1)
由于我使用的ViewBag
元素与列表项属性之一具有相同的名称,因此抛出此错误。
解决方案是将ViewBag.StateCode
更改为ViewBag.StateCodeList
。