我有一个
的登录页面用户名文本框 密码测试盒
的数据库下拉列表`@Html.DropDownListFor(model => model.DBInstance, (SelectList)ViewBag.DBInstances)`
当我运行我的页面登录页面正在加载完美。下拉。
保持此下拉列表之前。正确显示用户名和密码验证。 保持此下拉列表而不输入用户名和密码后,默认下拉列表选择第一个值
点击提交按钮 我在下拉列表中遇到错误 没有类型' IEnumerable'的ViewData项目。有密钥' DBInstance'。
这是我的班级
[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的下拉列表中保留断点,但第一次获取值。
答案 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中设置。