在VS2010中处理MVC项目时,我一直被困在相同的DropDownList问题上。因为当我所有相关的代码复制到一个全新的,空白的项目,二审实际运行完全,准确地产生的结果我希望这个问题已经变得更加令人沮丧的现在...Visual Studio MVC奇怪?
控制器:
<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'.
但是当我将这一位代码复制到空白解决方案时,再次没有运行时错误。
任何想法如何解决这个甚至任何线索是什么导致这种不一致?我不想将当前项目中的所有其他文件复制到新的文件中,只是为了让问题再次显示在某处(当代码只有一半时会发生这种情况...)
说实话,当我用'protocols'替换我的第一个项目中的'cprotocols'的所有实例时,这个页面在它运行的意义上起作用。发生了什么事是我第一次编码这个页面时,我命名ViewData键'protocols',并且为了简单起见只有两个选项(10GBaseLX4和100BaseFX)。现在,尽管我的控制器添加了3个新选项,但该列表仍然只显示了原来的两个。有一点,我有DDL(ajax)背后的逻辑,它起初是功能性的,但是当我在选择时更改回发的消息时,页面会显示一条旧消息。 – Kevin
这很奇怪,也许你有一些奇怪的缓存正在进行,尝试运行一个** Clean Solution **,然后从Build菜单运行** Build Solution **,在VS –
中发生同样的事情。更有趣的是,我已经尝试了几乎所有可以考虑的新项目变更(更改ViewData变量名称,添加选项,删除选项,更改消息,在新浏览器中重新尝试等),并且所有操作均可用作它甚至应该使用据说在引擎盖下发生的Ajax缓存,并且偶尔会破坏一些脚本。我想我只会复制我所有的旧代码。谢谢! – Kevin