我在 MVC3 中填充下拉列表时遇到一点问题。我希望有人能在这方面给我帮助。
我正在尝试呈现包含城市 DropDownList 的用户 View 。这应该从数据库中获取。事实上,User 类有一个 City 类的 ForeignKey。
这是 Controller 和 View :
public ViewResult Index()
{
//return View(model);
var DefaultCities = new[]
{
new {Name = "London"}
}.ToList();
IEnumerable<SelectListItem> cities = unitOfWork.CityRepository.Get() as IEnumerable<SelectListItem>;
ViewData["AllCities"] = cities != null ? new SelectList(cities.AsEnumerable(), "CityID", "Name") : new SelectList(DefaultCities.AsEnumerable(), "Name");
return View(unitOfWork.UserRepository.Get(orderBy: us => us.OrderByDescending(u => u.ID)).OfType<User>().ToList());
}
// View
<div class="editor-field">
@Html.DropDownList(**"CityID"**, ViewData["AllCities"] as SelectList, "--Choose One--"))
@Html.ValidationMessageFor(model => model.CityID)
</div>
但是显示如下错误:
There is no ViewData item of type 'IEnumerable' that has the key 'CityID'.
这是我第一次使用 MVC! “CityID”指的是什么? @Html.DropDownList
的第一个参数应该写什么?
正如我在不同文章中所读到的,提到的参数应该是表单字段的名称。
谁能推荐一个示例代码? 任何帮助将不胜感激。
最佳答案
下面这行代码是错误的:
new SelectList(cities.AsEnumerable(), "CityID", "Name")
您正在指定 CityID
和 Name
属性但cities
是一个 IEnumerable<SelectListItem>
.和 SelectListItem
只有 Value
和 Text
特性。没有 CityID
这样的东西和 Name
.
所以你的意思可能是:
ViewData["AllCities"] = cities != null
? new SelectList(cities, "Value", "Text")
: new SelectList(DefaultCities, "Name");
或者简单地说:
ViewData["AllCities"] = cities != null
? cities
: new SelectList(DefaultCities, "Name");
在你看来:
@Html.DropDownList(
"CityID",
ViewData["AllCities"] as IEnumerable<SelectListItem>,
"--Choose One--"
)
至于CityID
就您的观点而言,这基本上将由 DropDownList 助手用来生成 name
DOM 中的 select 元素的属性,因此,选定的值名称将传递给您要将表单提交到的 Controller 操作。
顺便说一句,使用 ViewData/ViewBag 是非常糟糕的做法。我建议您改用 View 模型,并在您的 View 中使用强类型的 DropDownListFor 帮助器,它将绑定(bind)到 View 模型上的特定属性。
关于c# - 在 MVC3 中填充 DropDownList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865082/