MVC2アセンブリを使用してMVC1アプリケーションを問題なく実行できますか?一部のサードパーティツールがMVC2で壊れていることを理解していますが、他のツールを使用していないと仮定しましょう。
3 に答える
重大な変更がありました。
1.0プロジェクトを2.0で実行したい場合は、さまざまな場所で物事を探します。したがって、アプリケーションを2.0に移行する必要があります。。
「壊れる」可能性のある変更は次のとおりです(プレビュー2の時点で現在)。
プレビュー2での変更
ヘルパーがMvcHtmlString
オブジェクトを返すようになりました
ASP.NET 4の新しいHTMLエンコード式構文を利用するために、HTMLヘルパーの戻り値の型が。MvcHtmlString
ではなくなりましたstring
。ASP.NET MVC2とASP.NET3.5の新しいヘルパーを使用する場合、HTMLエンコード構文を利用できないことに注意してください。新しい構文は、ASP.NET4でASP.NETMVC2を実行する場合にのみ使用できます。
JsonResult
HTTPPOSTリクエストにのみ応答するようになりました
情報開示の可能性があるJSONハイジャック攻撃を軽減するために、デフォルトでは、JsonResult
クラスはHTTPPOST
リクエストにのみ応答するようになりました。オブジェクトを返すアクションメソッドへのAJAXGET呼び出しは、JsonResult
代わりにPOSTを使用するように変更する必要があります。必要に応じて、の新しいJsonRequestBehavior
プロパティを設定することにより、この動作をオーバーライドできますJsonResult
。潜在的なエクスプロイトの詳細については、PhilHaackのブログのブログ投稿JSONHijackingを参照してください。
のModelおよびModelTypeプロパティセッターModelBindingContext
は廃止されました
新しい設定可能なModelMetadata
プロパティがModelBindingContext
クラスに追加されました。新しいプロパティは、モデルとModelType
プロパティの両方をカプセル化します。Model
およびプロパティは廃止されましたModelType
が、下位互換性のために、プロパティゲッターは引き続き機能します。ModelMetadata
それらは値を取得するためにプロパティに委任します。
プレビュー1の変更
DefaultControllerFactory
クラスの変更は、それから派生したカスタムコントローラーファクトリを壊します
この変更は、から派生したカスタムコントローラファクトリに影響しますDefaultControllerFactory
。DefaultControllerFactoryクラスは、RequestContext
プロパティを削除し、代わりにリクエストコンテキストインスタンスを保護された仮想メソッドGetControllerInstance
とに渡すことで修正されましたGetControllerType
。
カスタムコントローラーファクトリは、ASP.NETMVCアプリケーションに依存性注入を提供するためによく使用されます。
ASP.NET MVC 2をサポートするようにカスタムコントローラーファクトリを更新するには、メソッドの署名を新しい署名と一致するように変更し、プロパティの代わりに要求コンテキストパラメーターを使用します。
「エリア」は予約済みのルート値キーになりました
ルート値の文字列「area」は、「controller」や「action」と同じように、ASP.NETMVCで特別な意味を持つようになりました。1つの意味は、HTMLヘルパーに「area」を含むルート値ディクショナリが提供されている場合、ヘルパーはクエリ文字列に「area」を追加しなくなるということです。
エリア機能を使用している場合は{area}
、ルートURLの一部として使用しないでください。
既知の問題点
[強い型のビューを作成する]チェックボックスがオンで、[空]以外の[コンテンツの表示]が選択され、存在するタイプに[ビュー]データクラスのタイプ名が指定されている場合、[ビューの追加]ダイアログボックスはNullReferenceExceptionをスローします。タイプ名を指定するときは、ドロップダウンリストを使用してタイプ名を選択するか、完全修飾タイプ名を入力してください。存在しないタイプの場合は、[コンテンツの表示]を[空]に設定する必要があります。
このドキュメントをチェックしてください。重大な変更について学習します:http: //go.microsoft.com/fwlink/ ?LinkID = 157072
私を悩ませた1つの落とし穴は、モデルのすべてのフィールドが常に投稿で検証されるようになったことです。
変更については、BradWilsonがここで説明しています。
Steve Andersonのブログ投稿では、この問題と私のお気に入りの解決策(カスタムバリデーターを使用)について説明しています。