ASP.NET-MVC2预览1:有任何重大变化吗?

时间:2009-08-31 13:30:25

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

  1. 我正在关注史蒂文桑德森的'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
  5. 回想起来,我认为假设ASP.NET MVC2 Preview 1只是附加功能是一个非常糟糕的主意;但我希望其他人能够参与其中。

    是否有人注意到ASP.NET MVC 2 Preview 1中的任何重大更改?

    此外 - 是否有人注意到任何影响Castle Windsor的变化?

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

4 个答案:

答案 0 :(得分: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);
}

-Damien

答案 1 :(得分:2)

来自ScottGu's blog(截至此时尚未回答):

  

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

     

喜欢MVC的方向。一   问题,在MVC 2中,你已经改变了   GetControllerInstance的签名   从System.Type到   System.Web.Routing.RequestContext和   系统类型。是故意的   常驻?这会导致问题   城堡,我不知道如何   处理。

     

谢谢!

     

帕特里克

答案 2 :(得分: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中出现“Value not not null”错误。

在做出这个改变后,温莎开始为我工作。希望这会有所帮助。

干杯, 杰森

答案 3 :(得分: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中的单引号和双引号。