【发布时间】:2015-03-13 08:04:07
【问题描述】:
在我想用于登录的表单中使用 DropDownListFor 助手时遇到了困难(安全性不是这里的问题)。 我不想让用户输入其用户名,而是让他从下拉列表中选择它。
但我无法让 ASP.NET 自动将我的模型的 EmpName 属性设置为下拉列表中的选定值。
这是我尝试过的:
以下方法显示登录页面
[HttpGet]
public ActionResult Index()
{
// Retrieving all users from DB
using (var db = new BidManagementContext())
{
var users = from u in db.LOGIN
select u.EmpName;
ViewBag.AllUsers = new SelectList(users.ToList());
return View();
}
}
这些是视图中的一些线:
<div class="form-group">
@Html.LabelFor(model => model.EmpName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.EmpName, ViewBag.AllUsers as SelectList, new { @class = "form-control" })
</div>
</div>
按照我的做法,当 ASP.NET 尝试将下拉选择的值绑定到模型时出现错误:
System.Web.Mvc.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:没有具有键“EmpName”的“IEnumerable”类型的 ViewData 项。
我不确定在这里做什么:-/
【问题讨论】:
-
表示
ViewBag.AllUsers为空。可能您在提交后返回视图但未重新分配SelectList -
您是否为视图定义了模型类型?
-
@StephenMuecke 哦,就这么简单......我觉得有点愚蠢:-/你会在评论之外回复帖子,以便我可以投票并将你的答案标记为解决方案吗?
-
我认为你应该为下拉列表中的元素建立一个数据类型(类),并且该类必须有一个名为 EmpName 的字段。
标签: c# asp.net-mvc