2011-09-22 7 views
0

私は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'.ですが、このコードを空白の解決策にコピーすると、実行時エラーは発生しません。

このような不一致を引き起こしていることについて、これを解決する方法や、何か手がかりを知る方法はありますか?現在のプロジェクトから他のすべてのファイルを新しいプロジェクトにコピーして、コードの半分が壊れたときに発生するようになっています...

答えて

0

モジュールに問題がありました。コード自体は問題ありません。私は一時的なASP.NETファイルを削除し、GACをクリーンアップし、プロジェクト内の現在のアセンブリ参照をすべて消去し、ソリューションをクリーンアップし、必要な参照を再追加し、最後にクリーンアップして再構築する必要がありました。 VS2010が古いビルドのアセンブリを参照しているのはなぜか(単にクリーニングと再構築だけでは不十分である)についてはまだ分かりません。私はまた、環境が "リフレッシュ"しなくなった時点と、単に廃止されたビルドを参照することを決めた時点を知りません。私はこの点についてもう少し研究をして、この記事に追加しようとします。

0

私はViewDataキー名を変更してどこにでも役立つかどうかを確認します。そうでない場合は、新しいプロジェクトを作成して、既存のモデル/コントローラ/ビュークラスを他のプロジェクトにコピーすることができれば、これはプロジェクト構成の中で何かのように思えるかもしれません。

ほんと少し役に立ちます:)

+0

私の最初のプロジェクトの 'cprotocols'のすべてのインスタンスを' protocols'に置き換えると、ページは実行されるという意味で「機能します」。私はこのページを初めてコーディングしたとき、ViewDataキーに 'protocols'という名前をつけ、簡単にするために2つのオプション(10GBaseLX4と100BaseFX)しか持たないということでした。今、私のコントローラが3つの新しい選択を追加しても、リストは元の2つだけを表示します。ある時点で、最初は機能していたDDL(ajax)の背後にロジックがありましたが、選択時にメッセージをポストバックしたときには、代わりに古いメッセージが表示されます。 – Kevin

+0

これは非常に奇妙なことですが、奇妙なキャッシングが発生している可能性があります。** Clean Solution **を実行してからVSのBuildメニューからSolution Build **を実行してください。 –

+0

同じことが起こります。新しいプロジェクト(ViewData変数名の変更、オプションの追加、オプションの削除、メッセージの変更、新しいブラウザでの再試行など)で思いついたすべての変更を試してみました。それはおそらくフードの下で発生し、時にはいくつかのスクリプトを壊すことが知られているAjaxのキャッシュですべきです。私は私の古いコードをすべてコピーします。ありがとう! – Kevin