0
  1. 私はスティーブン・サンダーソンの「ProASP.NETMVCFramework」の本をフォローしていました。
  2. 132ページで、作成者の推奨に従って、ASP.NET MVC Futuresアセンブリをダウンロードし、MVCプロジェクトに追加しました。
  3. 次に、作成者の励ましなしに、ASP.NET MVC2 Preview 1 dllをダウンロードしてインストールし、プロジェクトに組み込みました。
  4. これで、Webサイトをロードできなくなりました。
    1. つまり、Visual StudioでF5キーを押すと、このエラーが発生します

振り返ってみると、ASP.NETMVC2プレビュー1が付加的なものにすぎないと想定するのは本当に悪い考えだったと思います。でも、他の人にも量ってもらいたいです。

ASP.NET MVC 2 Preview 1の重大な変更に気付いた人はいますか?

また-CastleWindsorに影響を与える変更に気付いた人はいますか?

また、IIS6とIIS7の影響に注意する必要があるかどうかをお知らせください。

4

4 に答える 4

3

VS 2010 Beta 2 で Castle と MVC2 に問題がありました。

GetControllerInstance のこのコードで Castle を動作させることができました。問題は、すべてのリクエストがこれ (css ファイルなど) に入っていたため、それらに対して null を返すだけでうまくいくように見えることでした。

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
     if (controllerType == null) { return null; }

     return (IController)_container.Resolve(controllerType);
}

-ダミアン

于 2009-10-21T15:40:26.280 に答える
2

ScottGu のブログから(現時点では未回答):

2009 年 8 月 18 日火曜日午後 1 時 36 分、パトリック・クーパー・スコット、

MVC の方向性が大好きです。MVC 2 では、GetControllerInstance の署名を System.Type から System.Web.Routing.RequestContext と System.Type に変更しました。意図的で永続的ですか?Castle で問題が発生しているため、まだ対処方法がわかりません。

ありがとう!

パトリック

于 2009-08-31T13:36:45.067 に答える
2

Steven Sanderson の著書『Pro ASP.Net MVC Framework』を使用している場合は、WindsorControllerFactory クラスを変更して、DefaultControllerFactory によって公開されたインターフェイスを操作する必要があります。このクラスは MVC 2 Preview 2 で更新されました。最終リリースがどうなるかは誰にもわかりません。

変化する:

protected override IController GetControllerInstance(Type controllerType)

に:

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)

また、MVC 2 Preview 2 フレームワークが非コントローラー クラスで渡されていないことを確認する必要があることもわかりました (コントローラー タイプとして favicon.ico で予期せず渡されていました)。したがって、更新された GetControllerInstance メソッドは次のようになります。

protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
   //Debug.Print("Controller: {0}, Action: {1}", requestContext.RouteData.Values["Controller"], requestContext.RouteData.Values["Action"]);

   if (controllerType == null)
   {
      //Debug.Print("Is IController: {0}", (controllerType is IController));
      //Debug.Print("Is null: {0}", (controllerType == null));
      return null;
   } 
      else 
   {
      return (IController)container.Resolve(controllerType);
   }
}

WindsorControllerFactory で「値を null にすることはできません」というエラーが発生する理由を確認したい場合に備えて、デバッグ コードを残しました。

この変更を行った後、Windsor は私のために働き始めました。うまくいけば、これは役に立ちます。

乾杯、ジェイソン

于 2010-01-08T04:41:23.600 に答える
1

別の変更は、ViewModel からフォーム リストを処理する場合です。

たとえば、MVC 1.0 では、オブジェクトIList< MyObject >のリストがビューに表示されている場合

<% for (int i = 0; i < Model.Length; i++) { %>
    <%= Html.TextBox("MyObject[" + i + "].FirstName") %>
    <%= Html.TextBox("MyObject[" + i + "].LastName") %>
<% } %>

入力ボックスは次のようにレンダリングされます

<input id="MyObject[0]_FirstName" name="MyObject[0].FirstName" type="text" value="" />

注: id = MyObject[0]_FirstNameおよび name = MyObject[0].FirstName

ただし、MVC 2.0 では、それらは次のようにレンダリングされます。

<input id="MyObject_0__FirstName" name="MyObject[0].FirstName" type="text" value="" />

注: id = MyObject_[0]__FirstNameおよび name = MyObject[0].FirstName

これにより、テーブル データの操作に使用していた jquery が壊れました。ID 内の 1 つおよび 2 つのアンダースコアに注意してください。

于 2010-03-17T09:55:21.200 に答える