ASP.NET-MVC2 Preview 1: Есть ли серьезные изменения? - PullRequest
0 голосов
/ 31 августа 2009
  1. Я читал книгу Стивена Сандерсона « Pro ASP.NET MVC Framework ».
  2. На странице 132 в соответствии с рекомендацией автора я скачал сборку ASP.NET MVC Futures и добавил ее в свой проект MVC.
  3. Затем, без поддержки автора , я скачал, установил и включил dll ASP.NET MVC2 Preview 1 в свой проект.
  4. Теперь я больше не могу загрузить сайт.
    1. То есть, когда я нажимаю F5 в Visual Studio, я получаю эту ошибку .

Оглядываясь назад, я думаю, что было бы очень плохой идеей предполагать, что ASP.NET MVC2 Preview 1 будет только аддитивным; но я бы хотел, чтобы другие люди взвесили.

Кто-нибудь заметил какие-либо серьезные изменения в ASP.NET MVC 2 Preview 1?

Также - Кто-нибудь заметил какие-либо изменения, которые влияют на Замок Виндзор?

Также, пожалуйста, дайте мне знать, если я буду помнить о последствиях IIS6 против IIS7.

Ответы [ 4 ]

3 голосов
/ 21 октября 2009

У меня были проблемы с Castle и MVC2 в VS 2010 Beta 2.

Мне удалось заставить Касла работать с этим кодом для GetControllerInstance. Проблема заключалась в том, что все запросы приходили сюда (например, файлы css), так что просто возвращение null для них, похоже, работает.

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

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

-Damien

2 голосов
/ 08 января 2010

Если вы работаете с книгой Стивена Сандерсона, 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.

После внесения этого изменения Виндзор начал работать на меня. Надеюсь, это поможет.

Cheers, Jason

2 голосов
/ 31 августа 2009

Из Блог ScottGu (без ответа на данный момент):

вторник, 18 августа 2009 г., 13:36 Патрик Купер Скотт,

Люблю направление MVC. Один вопрос, в MVC 2, вы изменили подпись для GetControllerInstance от просто System.Type к System.Web.Routing.RequestContext и Тип системы. Намеренно и постоянный? Это вызывает проблемы с Замок, что я еще не уверен, как справиться.

Спасибо!

Patrick

1 голос
/ 17 марта 2010

Другое изменение относится к спискам форм из вашей 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 и имя = MyObject [0] .FirstName

Однако в MVC 2.0 они отображаются как

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

Примечание: id = MyObject_ [0] __ Имя_1025 * и имя = MyObject [0]. Имя_первой

Это сломало некоторые jquery, которые я использовал, чтобы манипулировать данными моей таблицы. Обратите внимание на одинарные и двойные подчеркивания в id.

...