回想起来,我认为假设ASP.NET MVC2 Preview 1只是附加功能是一个非常糟糕的主意;但我希望其他人能够参与其中。
是否有人注意到ASP.NET MVC 2 Preview 1中的任何重大更改?
此外 - 是否有人注意到任何影响Castle Windsor的变化?
另外,如果我应该注意IIS6与IIS7的分支,请告诉我。
答案 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中的单引号和双引号。