ASP MVC3错误 - 没有类型为'IEnumerable <selectlistitem>'的ViewData项具有键</selectlistitem>

时间:2013-03-19 22:48:08

标签: asp.net-mvc asp.net-mvc-3 list viewmodel selectlist

我对此进行了一些研究,并没有找到一个能够处理类似情况或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>

2 个答案:

答案 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