当我在VS2010中做一个MVC项目的时候,我已经被同样的DropDownList问题困扰了好几天。问题现在变得更加令人沮丧,因为当我将所有相关代码复制到一个全新的空白项目中时,第二个实例实际上运行得很好,并产生了我期望的结果……
控制器:
<HandleError()> _
Public Class HomeController
Inherits System.Web.Mvc.Controller
Function Index() As ActionResult
ViewData("Message") = "Welcome to ASP.NET MVC!"
Return View()
End Function
Function About() As ActionResult
Dim configList As List(Of String) = New List(Of String)
configList.Add("10GBaseLX4")
configList.Add("10GFC")
configList.Add("10GigE")
configList.Add("100BaseFX")
configList.Add("Test")
ViewData("cprotocols") = New SelectList(configList)
Return View()
End Function
End Class查看:
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">
About Us
</asp:Content>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>About</h2>
<p>
<% Using Html.BeginForm()%>
<%= Html.DropDownList("cprotocols") %>
<% End Using %>
</p>
</asp:Content>页面现在不会做任何事情,除了简单地在控制器中显示一个带有硬编码的选项的下拉列表之外,但当我的当前站点拒绝向用户显示列表时,我甚至不会费心编写逻辑。
错误消息是There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'cprotocols'.,但同样,当我将这段代码复制到空白解决方案中时,没有运行时错误。
有没有办法解决这个问题,甚至有什么线索可以解释是什么导致了这种不一致?我不想将当前项目中的所有其他文件复制到新的项目中,只是为了让问题再次显现出来(当代码只有一半损坏时,肯定会发生这种情况)。
发布于 2011-09-23 23:47:49
事实证明,这是模块的问题;代码本身没有问题。我不得不删除临时的ASP.NET文件,清理我的GAC,以及核化项目中所有当前的程序集引用,清理解决方案,重新添加所需的引用,最后清理并重新构建。我仍然不清楚为什么VS2010会引用来自旧版本的程序集(仅仅清理和重建是不够的)。我也不知道环境在什么时候停止了“刷新”,并决定简单地引用过时的构建。我将尝试在这一点上做更多的研究,然后添加到这篇文章中。
发布于 2011-09-22 22:41:43
我会尝试更改ViewData密钥名称,看看这样做是否有帮助。如果没有,如果可以,您可以创建一个新项目,并将所有现有的模型/控制器/视图类复制到另一个项目上,这似乎是项目配置中可能发生的问题。
希望这对您有一点帮助:)
https://stackoverflow.com/questions/7516451
复制相似问题