0
  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 时,我得到了这个错误

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

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

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

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

4

4 回答 4

3

我在 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);
}

-达米安

于 2009-10-21T15:40:26.280 回答
2

来自ScottGu 的博客(截至目前尚未得到答复):

2009 年 8 月 18 日,星期二,下午 1:36,Patrick Cooper Scott,

喜欢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 作为 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 中出现“值不能为空”错误。

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

干杯,杰森

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

于 2010-03-17T09:55:21.200 回答