没有名为“Blah”的 ViewData 项,类型为“IEnumerable<SelectListItem>”。

4
这个错误信息真让我头疼。在使用ASP.NET MVC v1.0的Html.ListBox和Html.DropDownList HtmlHelpers时,我遇到了这个问题。填充列表没有问题 - 我可以查看它们等等,但当我使用传递给控制器的FormCollection获取所选值来创建模型中的新记录时,就会出现此错误。我已经尝试了几种不同的配置和代码排列方式,如其他帖子中所述 - 但都无济于事。希望有人能告诉我这是否是已知问题,以便我可以继续我的生活!如果需要,我可以贴出代码。

哦,如果有解决方法或建议,那就太好了;-)

谢谢!

Bernard。


好的,快速更新,我已经在下面的回复中发布了三条评论,澄清了我在这里的情况细节。我现在有另一个问题要分享 - 我尝试了ScottGu的替代推荐方法 - 实现ModelView。因此,当我这样做时,基本上是相同的场景,但我在与"There is no ViewData item with the key 'Blah' of type 'IEnumerable'."相同的位置收到了"Object reference not set to an instance of an object."错误。

我开始认为这可能与EF的工作方式有关...


你能写出你的操作方法吗? - user434917
// POST: /Work/Create[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection collection) { try { // 准备变量 int jobID, taskID; int.TryParse(collection["Jobs"], out jobID); int.TryParse(collection["Tasks"], out taskID);// 设置业务对象 var work = new Work(); work.Comment = collection["Comment"]; work.Job = dataSourceJob.GetJob(jobID); work.Task = dataSourceTask.GetTask(taskID);// 更新数据库并返回 dataSourceWork.Add(work); return RedirectToAction("Index"); } catch { return View(); } } - Bernard
1
哦,看起来真的很糟糕。抱歉啊伙计 - 希望你能摆脱那段代码的困扰! - Bernard
3个回答

2

好的,我显然是一个EF/MVC新手...

尽管我的问题通过实现适当的异常管理得到了解决...但当我开始捕获它时,异常消息是“无法定义两个对象之间的关系,因为它们连接到不同的ObjectContext对象。”因此,我现在为所有数据访问使用相同的ObjectContext,一切都回到正轨。

感谢您的关心,下次我会提出更聪明的问题 - 我保证!

Bernard。


0

您可以在验证发生的相应的后置方法中再次绑定选择列表。 例如,如果控制器的创建视图中存在错误,则可以在创建后置方法中再次绑定下拉列表。


0

好的,抱歉,我没有提供太多细节 - 我希望这是一个相当普遍的问题。基本上,我正在尝试做的就是ScottGu在这里讲解的内容:http://nerddinnerbook.s3.amazonaws.com/Part6.htm我想将“创建”或“编辑”结果POST回控制器。 - Bernard
错误发生在“work.Task = dataSourceTask.GetTask(taskID);”这一行。我正在使用Entity Framework。Work结构的Job和Task属性是EntityReferences。奇怪的是,一切都正常,直到崩溃的那一点。我的jobID和taskID变量已经填充,work.Job也填充得很好,当我尝试去做任何超出填充第一个引用结构的事情时(是的,我已经尝试过操纵代码来做其他事情,先填充Task等等——总是相同的错误)。希望你能帮忙!谢谢,伯纳德。 - Bernard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接