MVC asp.net 无 IEnumerable 类型的 ViewData 项

本文关键字:类型 ViewData SelectListItem asp net IEnumerable MVC | 更新日期: 2023-09-27 18:32:59

我对MVC asp.net 很陌生。 我正在编写一个应用程序,该应用程序将允许系统管理员查看/编辑/添加服务器列表。我已经有了服务器的数据库,所以我首先使用数据库来创建实体框架模型。

从这里开始,我使用Visual Studios自动生成来创建几个视图。 第一个神奇地工作,真正向我展示了这个框架的强大功能,因为它解决了所有外键查找,而无需我在连接表方面进行任何工作。

第二,我使用 Visual Studio 生成了一个 Create 视图。 然后,我创建了一个创建 [HttpGet] 函数,该函数仅返回一个新对象。 但是,当我单击此链接时 - 应用程序会在以下代码行上爆炸:

        <div class="form-group">
        @Html.LabelFor(model => model.ServerOS, "ServerOS", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("ServerOS", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.ServerOS, "", new { @class = "text-danger" })
        </div>
    </div>

上面的代码是在我为模型创建视图时由视觉工作室生成的。 它给了我错误:

An exception of type 'System.InvalidOperationException' occurred in 
System.Web.Mvc.dll but was not handled in user code
Additional information: There is no ViewData item of type 
'IEnumerable<SelectListItem>' that has the key 'ServerOS'.

视图的操作如下所示:

    [HttpGet]
    public ActionResult Create()
    {
        return View("Create", 
            new SQLServer());
    }

我应该注意,ServerOS是数据库中的外键。 我对HTML也很陌生,所以我很难阅读它正在做什么。

MVC asp.net 无 IEnumerable<SelectListItem> 类型的 ViewData 项

好吧,我想我认为 mvc asp.net 魔力比它更强,当然我必须指定列表。 Stephen Muecke 指出,我需要在控制器中生成一个选择列表并将其传递给视图。 对于那些搜索这个问题的人,通过在控制器中添加以下代码行来修复代码:

var OSListQuery = (from version in _ServerDB.Versions select version).ToList();
ViewBag.ServerOS = new SelectList(OSListQuery, "VersionID", "Version1");

其中,VersionID 是查询列表中数据变量的名称,Version1 是我想在查询列表中显示的文本的名称。