Проблемы при обновлении ASP.NET MVC с версии 5 до бета-версии? - PullRequest
9 голосов
/ 16 октября 2008

Какие проблемы или рефакторинг пришлось делать при обновлении ASP.NET MVC Preview 5 до недавно выпущенной Beta версии?

Ответы [ 19 ]

11 голосов
/ 16 октября 2008

Выпуск номер один: желтый экран смерти.
CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

Решение: я удалил все ссылки в своем проекте и заново добавил их, указав на сборки в программных файлах \ asp.net \ asp.net mvc beta \ сборки, но это не решило проблему.

У меня был файл system.web.mvc в gac (понятия не имею, как). Пытался его удалить. Невозможно; Сборка требуется одним или несколькими приложениями. Пришлось найти сборку как описано здесь и удалить запись реестра. Затем я смог удалить версию system.web.mvc для gac.

Это все еще не решило проблему. Я должен был снова добавить ссылки снова. Теперь он работает.


Просто чтобы прояснить !!! Бета-сборки были отброшены в Program Files, тогда как более старая версия System.Web.Mvc была в GAC.


6 голосов
/ 16 октября 2008

Я собираюсь сделать это сам. Вот список изменений из readme:

Изменения, сделанные между CodePlex Preview 5 и Beta

  • Изменены стандартные сообщения проверки, чтобы быть более удобными для конечного пользователя.
  • Переименовано из CompositeViewEngine в AutoViewEngine.
  • Добавлено свойство Url для контроллера типа UrlHelper. Это позволяет сгенерировать URL-адреса на основе маршрутизации из контроллера.
  • Добавлен абстрактный базовый класс ActionNameSelectorAttribute, который служит базовым типом для ActionNameAttribute. Унаследовав от этого базового класса атрибутов, вы можете создавать собственные атрибуты, которые участвуют в выборе действия по имени.
  • Добавлен новый метод ReleaseView в IViewEngine, позволяющий уведомлять пользовательские механизмы представления о завершении рендеринга представления. Это полезно для очистки или для сценариев с пулами представлений.
  • Переименован метод ControllerBuilder DisposeController в ReleaseController, чтобы соответствовать шаблону, установленному для механизмов представления.
  • Удалил большинство методов класса HtmlHelper, преобразовав их вместо этого в методы расширения класса HtmlHelper. Эти методы существуют в новом пространстве имен (System.Web.Mvc.Html). Если вы мигрируете из Preview 5, вы должны добавить следующий элемент в раздел пространств имен файла Web.config: <add namespace="System.Web.Mvc.Html"/> Это дает вам возможность полностью заменить наши вспомогательные методы своими собственными.
  • Изменен механизм связывания модели по умолчанию (DefaultModelBinder) для обработки сложных типов. Интерфейс IModelBinder также был изменен, чтобы принимать один параметр типа ModelBindingContext.
  • Добавлено новое перечисление HttpVerbs, которое содержит наиболее часто используемые глаголы HTTP (GET, POST, PUT, DELETE, HEAD). Также добавлена ​​перегрузка конструктора в AcceptVerbsAttribute, которая принимает перечисление. Перечисленные значения могут быть объединены. Поскольку можно отвечать на глаголы HTTP, которые не включены в перечисление, AcceptVerbsAttribute сохраняет конструктор, который принимает массив строк в качестве параметра. Например, в следующем фрагменте показан метод действия, который может отвечать на запросы POST и PUT.

    [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Put)]  
    public ActionResult Update() {...
    }
    
  • Изменен вспомогательный метод RadioButton, чтобы каждая перегрузка принимала значение. Поскольку переключатели используются для указания выбора из набора возможных значений, необходимо указать значение для переключателя.

  • Внесены изменения и исправления в шаблон проекта по умолчанию. Это включает в себя перемещение файлов сценариев в новую папку Scripts. Шаблон по умолчанию использует класс ModelState для сообщения об ошибках проверки.
  • Изменен выбор метода действия. Если два метода действия соответствуют запросу, но только один из них имеет атрибут, производный от ActionMethodSelectorAttribute, который соответствует запросу, то это действие вызывается. В более ранних выпусках этот сценарий приводил к исключению. Например, следующие два метода действия находятся в одном контроллере:

    public ActionResult Edit() {  
      //...  
    }  
    
    [AcceptVerbs(HttpVerbs.Post)]  
    public ActionResult Edit(FormCollection form) {  
      //...
    }
    

В Preview 5 запрос POST для действия Edit вызовет исключение, потому что запрос соответствует двум методам. В бета-версии приоритет отдается методу, соответствующему текущему запросу, через атрибут AcceptVerb. В этом примере первый метод будет обрабатывать любые не POST-запросы для действия Edit.

  • Добавлена ​​перегрузка для метода ViewDataDictionary.Eval, который принимает строку формата.
  • Удалено свойство ViewName из класса ViewContext.
  • Добавлен интерфейс IValueProvider для поставщиков значений, а также реализация по умолчанию DefaultValueProvider. Поставщики значений предоставляют значения, которые используются связывателями модели при привязке к объекту модели. Метод UpdateModel класса Controller был обновлен, чтобы можно было указывать пользовательский поставщик значений.
5 голосов
/ 17 октября 2008

Я столкнулся с той же проблемой, что и Уилл , и мне пришлось сделать то же самое, что и он, включая копирование dll-файлов в папку bin.

Теперь все работает на внутреннем сервере против сети, но вызывает сбой IIS7.

Хорошо, выясняется, что одной из основных проблем является то, что я пропустил шаг к обновлению сборок сборки в web.config :

<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
4 голосов
/ 22 октября 2008

Все, что мне нужно было сделать, это обновить сборки с

% ProgramFiles% \ Microsoft ASP.NET \ ASP.NET MVC Beta

Также получите самую последнюю версию Microsoft.Web.MVC из codeplex

чтобы обновить мою сборку фьючерсов тоже.

добавить 2 строки в web.config

Этот к <assemblies> Разделу:

<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 

Этот раздел <namespaces>:

<add namespace="System.Web.Mvc.Html"/>

Затем мне пришлось обновить все <%using (Html.Form()) до <%using (Html.BeginForm())

В одном файле кода мне нужно было добавить System.Web.Mvc.Html; пространство имен

Мои материалы основаны на MVC Store Роба Конери , так что любой, кто его использует, должен иметь возможность следовать приведенному выше.

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 19 октября 2008

Я пытаюсь выяснить, как работает новый ModelBinder, насколько я вижу, он сильно отличается, но мне пока не удалось узнать, как он работает ..

Мой старый выглядел так:

public class GuestbookEntryBinder : IModelBinder
    {
        #region IModelBinder Members

        public object GetValue(ControllerContext controllerContext, string modelName, Type modelType, ModelStateDictionary modelState)
        {
            if (modelType == typeof(GuestbookEntry))
            {
                return new GuestbookEntry
                {
                    Name = controllerContext.HttpContext.Request.Form["name"] ?? "",
                    Website = controllerContext.HttpContext.Request.Form["website"] ?? "",
                    Message = controllerContext.HttpContext.Request.Form["message"] ?? "",
                };
            }
            return null;
        }
        #endregion
    }

Новый выглядит так:

#region IModelBinder Members

public ModelBinderResult BindModel(ModelBindingContext bindingContext)
{
    throw new NotImplementedException();
}

#endregion

Есть подсказки?

2 голосов
/ 19 октября 2008

Проблема с AutoFac теперь решена в Редакции 454 базы кода AutoFac. http://code.google.com/p/autofac/issues/detail?id=86&can=1

2 голосов
/ 17 октября 2008

Не обращайте внимания на это ... Я неудачник - это Microsoft ASP.net в программных файлах ... не только ASP.net

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

При запуске бета-установщика на моем компьютере ничего не меняется. Я не вижу папку в папке Program Files ... сборки не добавляются в GAC ... даже установщик доходит до последнего шага, а затем зависает примерно на 10 минут.

Я удалял и переустанавливал пару раз без всякой удачи.

Кто-нибудь сталкивался с подобной проблемой?

1 голос
/ 20 октября 2008

В конструкторе ViewContext произошли серьезные изменения. Изменилось с:

ViewContext (контекст ControllerContext, строковое представление name, ViewDataDictionary viewData, TempDataDictionary tempData)

до:

ViewContext (контекст ControllerContext, представление IView, ViewDataDictionary viewData, TempDataDictionary tempData)

Это сломало мой код, потому что я использую MvcContrib.Services.IEmailTemplateService, который принимает ViewContext в своем методе RenderMessage. Чтобы получить IView от имени шаблона, я делаю следующее:

var view = ViewEngines.DefaultEngine.FindView (controllerContext, viewName, null);

Не уверен, что это лучшая практика, но, похоже, она работает.

1 голос
/ 18 октября 2008

О проблеме Autofac. В группе обсуждения autofac существует ветка о необходимости обновления фабрики контроллеров для обеспечения совместимости с бета-версией инфраструктуры MVC

http://groups.google.com/group/autofac/browse_thread/thread/68aaf55581392d08

Надеюсь, они очень скоро выложат новую версию: -)

1 голос
/ 18 октября 2008

Html.TextBox - значение теперь является объектом, а не строкой. Итак, возможны скрытые ошибки (не во время компиляции и даже не во время выполнения), например, я использовал этот перегруженный метод ранее Html.TextBox (имя строки, объект htmlAttributes). Теперь мои атрибуты переходят в значение текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...