没有类型为'IEnumerable <selectlistitem>'的ViewData项具有键'DBInstance'</selectlistitem>

时间:2014-04-09 07:28:16

标签: asp.net-mvc-4 selectlist

我有一个

的登录页面

用户名文本框 密码测试盒

的数据库下拉列表
`@Html.DropDownListFor(model => model.DBInstance, (SelectList)ViewBag.DBInstances)`

当我运行我的页面登录页面正在加载完美。下拉。

保持此下拉列表之前

。正确显示用户名和密码验证。 保持此下拉列表而不输入用户名和密码后,默认下拉列表选择第一个值

点击提交按钮 我在下拉列表中遇到错误 没有类型&#39; IEnumerable&#39;的ViewData项目。有密钥&#39; DBInstance&#39;。

这是我的班级

[Required]
    public string UserName { get; set; }

   [Required]
   [DataType(DataType.Password)]
    public string Password { get; set; }

   public string Message { get; set; }

   public string DBInstance { get; set; } 

来自行动发送

  ViewBag.DBInstances = new SelectList(LoadDBInstances(), "Connectionstring", "InstanceName");

在提交按钮上单击我在ViewDag.DBInstances = null的下拉列表中保留断点,但第一次获取值。

1 个答案:

答案 0 :(得分:1)

您需要在 HttpGet HttpPost 这样的操作中添加此行:

public Action Result Create()
{
ViewBag.DBInstances = new SelectList(LoadDBInstances(), "Connectionstring", "InstanceName");
return View();
}


[HttpPost]
public Action Result Create(YourModel model)
{
ViewBag.DBInstances = new SelectList(LoadDBInstances(), "Connectionstring", "InstanceName");
return View();
}

[HttpPost]
    public Action Result Create(FormCollection form)
    {
    ViewBag.DBInstances = new SelectList(LoadDBInstances(), "Connectionstring", "InstanceName");
    return View();
    }

因为当您在 ViewBag 中设置值时,可以在该操作的视图中访问它,但是当调用另一个操作时,ViewBag值将被销毁,您需要再次在ViewBag中设置。