【问题标题】:ASP.NET-MVC2 Preview 1: Are There Any Breaking Changes?ASP.NET-MVC2 预览版 1:是否有任何重大更改?
【发布时间】:2010-11-24 08:33:01
【问题描述】:
  1. 我一直在关注 Steven Sanderson 的“Pro ASP.NET MVC Framework”一书。
  2. 在第 132 页,按照作者的建议,我下载了 ASP.NET MVC Futures 程序集,并将其添加到我的 MVC 项目中。
  3. 然后,在没有作者鼓励的情况下,我下载、安装了 ASP.NET MVC2 Preview 1 dll 并将其合并到我的项目中。
  4. 现在,我无法再加载该网站。
    1. 也就是说,当我在 Visual Studio 中按 F5 时,我得到this error

回想起来,我认为假设 ASP.NET MVC2 预览版 1 只会是附加的,这是一个非常糟糕的主意。但我希望其他人参与进来。

有没有人注意到 ASP.NET MVC 2 Preview 1 中的任何重大变化?

另外 - 有没有人注意到影响温莎城堡的任何变化?

另外,如果我应该注意 IIS6 与 IIS7 的后果,请告诉我。

【问题讨论】:

  • “我无法再加载我的项目”是什么意思,您的意思是您无法加载 Visual Studio 项目?不能编译?不能跑?您是否使用新的 dll 重新编译了您的应用程序? (而不是把它扔进垃圾箱)
  • 感谢您的反馈。我修改了我的问题。

标签: asp.net-mvc-2 iis-7 iis-6 castle-windsor


【解决方案1】:

我在 VS 2010 Beta 2 中遇到了 Castle 和 MVC2 的问题。

我能够让 Castle 使用 GetControllerInstance 的此代码。问题是所有请求都进入了这个(比如css文件),所以只为那些返回null似乎有效。

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

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

-达米恩

【讨论】:

    【解决方案2】:

    来自ScottGu's blog(目前尚未回复):

    2009 年 8 月 18 日星期二下午 1:36 帕特里克·库珀·斯科特,

    喜欢 MVC 的方向。一 问题,在 MVC 2 中,你改变了 GetControllerInstance 的签名 从只是 System.Type 到 System.Web.Routing.RequestContext 和 系统类型。是故意的并且 永恒的?它导致问题 我不知道怎么去的城堡 处理。

    谢谢!

    帕特里克

    【讨论】:

      【解决方案3】:

      如果您正在使用 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 作为 controllerType 传入)。所以更新后的 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 中出现“值不能为空”错误。

      进行此更改后,温莎开始为我工作。希望这会有所帮助。

      干杯, 杰森

      【讨论】:

        【解决方案4】:

        另一个变化是在处理来自 ViewModel 的表单列表时。

        例如,在 MVC 1.0 中,如果您的视图中显示了对象列表 IList

        <% 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 中的单下划线和双下划线。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-20
          • 2017-11-14
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          • 1970-01-01
          • 2022-06-16
          相关资源
          最近更新 更多