我是asp.net MVC的新手。我正在编写一个应用程序,允许系统管理员查看/编辑/添加服务器列表。我已经有了服务器数据库,所以我首先使用数据库来创建实体框架模型。
从这里开始,我使用Visual Studios自动生成创建了几个视图。第一个神奇地工作,并且真正向我展示了这个框架的强大功能,因为它解决了所有外键查找,而无需我在连接表方面做任何工作。
对于第二个,我使用Visual Studio生成了一个Create视图。然后我创建了一个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>
上面的代码是在我为模型创建视图时由visual studio生成的。它给了我错误:
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也很陌生,所以我很难读到它正在做的事情。
答案 0 :(得分:0)
嗯,我认为我认为asp.net mvc的魔力比它强,当然我必须指定列表。 Stephen Muecke指出我需要在控制器中生成一个选择列表并将其传递给视图。对于那些搜索这个问题的人来说,通过在控制器中添加以下代码行来修复代码:
var OSListQuery = (from version in _ServerDB.Versions select version).ToList();
ViewBag.ServerOS = new SelectList(OSListQuery, "VersionID", "Version1");
其中VersionID是查询列表中数据变量的名称,Version1是我想在查询列表中显示的文本的名称。