私はVS2010のMVCプロジェクトで作業している間、今でも同じDropDownList問題に悩まされています。私は完全に新しい空のプロジェクトに関連するすべてのコードをコピーしたときに、第二のインスタンスが実際に完全に実行され、まさに私が期待する結果を生成するため、問題が...今でも多くのイライラになってきているVisual Studio MVC Oddity?
コントローラー:
<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>
ページが今単にコントローラにハードコーディングされ示されたオプションを持つドロップダウンリストを表示以外何もしませんが、私も書き込みロジックを気にするつもりはありません私の現在のサイトrefユーザーにリストを表示するためにも使用します。
エラーメッセージはThere is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'cprotocols'.
ですが、このコードを空白の解決策にコピーすると、実行時エラーは発生しません。
このような不一致を引き起こしていることについて、これを解決する方法や、何か手がかりを知る方法はありますか?現在のプロジェクトから他のすべてのファイルを新しいプロジェクトにコピーして、コードの半分が壊れたときに発生するようになっています...
私の最初のプロジェクトの 'cprotocols'のすべてのインスタンスを' protocols'に置き換えると、ページは実行されるという意味で「機能します」。私はこのページを初めてコーディングしたとき、ViewDataキーに 'protocols'という名前をつけ、簡単にするために2つのオプション(10GBaseLX4と100BaseFX)しか持たないということでした。今、私のコントローラが3つの新しい選択を追加しても、リストは元の2つだけを表示します。ある時点で、最初は機能していたDDL(ajax)の背後にロジックがありましたが、選択時にメッセージをポストバックしたときには、代わりに古いメッセージが表示されます。 – Kevin
これは非常に奇妙なことですが、奇妙なキャッシングが発生している可能性があります。** Clean Solution **を実行してからVSのBuildメニューからSolution Build **を実行してください。 –
同じことが起こります。新しいプロジェクト(ViewData変数名の変更、オプションの追加、オプションの削除、メッセージの変更、新しいブラウザでの再試行など)で思いついたすべての変更を試してみました。それはおそらくフードの下で発生し、時にはいくつかのスクリプトを壊すことが知られているAjaxのキャッシュですべきです。私は私の古いコードをすべてコピーします。ありがとう! – Kevin