c# - 在 MVC3 中填充 DropDownList?

标签 c# asp.net-mvc-3

我在 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")

您正在指定 CityIDName属性但cities是一个 IEnumerable<SelectListItem> .和 SelectListItem只有 ValueText特性。没有 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/

相关文章:

c# - 在系统帐户下运行 Windows 计划任务时出错

c# - 如何检索 MVC 页面上所有输入的所有值

vb.net - ASP.NET MVC 3 上的 HtmlAttributes 与 VB.Net 中的 Razor View

asp.net-mvc-3 - MVC 3 EditorFor 指定模板时的列表

c# - 如何从其他线程将项目添加到列表框?

c# - 使用 Task.FromAsync 的 IAsyncResult 重载的性能成本

c# - 将 XML 字符串 block 附加到现有的 XmlDocument

c# - 链接两个函数 () -> Task<A> 和 A->Task<B>

c# - 在 View 中使用 expando 对象?

c# - 自定义 JQueryUI ValidationMessageFor 隐藏验证扩展方法