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

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

Ответы [ 19 ]

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

Поработав с этим большую часть дня, я решил опубликовать свое решение здесь. Может быть, это нормальное поведение Visual Studio, но я никогда не замечал этого раньше ...

В моем существующем проекте мне фактически пришлось вручную переместить бета-файлы в папку Bin. По какой-то причине, просто просмотр его с помощью «Добавить ссылку» не работал ...

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

Да, также используйте Autofac в качестве DI-контейнера.

Получите ту же проблему, что и этот парень

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

Не знаю, возможно ли исправление, но нельзя продолжать, пока оно не будет исправлено ......

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

Я использую Autofac в качестве моего DI-контейнера. Исключение пустого контейнера генерируется при попытке избавиться от объектов контейнера.

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

Когда я обновился с Preview 5 до Beta, у меня возникли трудности с обнаружением общих перегрузок ActionLink. Похоже, что они не включены в основной выпуск ASP.NET MVC, но поставляются как «фьючерсы».

Я нашел нужную сборку (Microsoft.Web.Mvc) @ http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&ReleaseId=18459

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

Это теперь сломано:

<%=Html.TextBox("Name", new Hash(@class => "required"))%>

В предварительном просмотре 5 вышеприведенное связывает значение ViewData.Model.Name с текстовым полем. Это все еще работает:

<%=Html.TextBox("Name")%>

Но если вы хотите указать атрибуты html, вы также должны указать значение следующим образом:

<%=Html.TextBox("Name", ViewData.Model.Name, new Hash(@class => "required"))%>

На самом деле это не совсем безопасно. Если есть вероятность, что ViewData.Model может быть нулевым, вам нужно сделать что-то вроде этого:

<%=Html.TextBox("Name", ViewData.Model == null ? null : ViewData.Model.Name, new Hash(@class => "required"))%>

Это изменение противоречит примечаниям к выпуску бета-версии:

"... для уменьшения перегрузки неоднозначность ... параметр значения был изменен от объекта к строке для нескольких вспомогательные методы. "

Параметр значения для TextBox раньше был строкой, и он был изменен на объект. Поэтому, чтобы избежать неясностей, им пришлось устранить одну перегрузку, которую я использую больше всего. (

ИМХО, каждый вспомогательный метод HTML должен иметь перегрузки, которые разрешают связывание во всех случаях без указания значения. В противном случае мы получим несовместимый код представления, который запутает будущих разработчиков.

0 голосов
/ 05 ноября 2008

Я обнаружил, что обновление элемента пространств имен web.config с помощью пространств имен из пустого проекта устранило мои проблемы. Мне также пришлось обновить ModelBinder из-за изменения интерфейса.

0 голосов
/ 23 октября 2008

Что будет сказано выше, за исключением того, что в дополнение к удалению сборок из GAC и повторному добавлению ссылок мне также пришлось снова запустить установщик бета-версии (на этот раз добавив нужные сборки в GAC, хотя я просто используя ссылку на файл).

Я подозреваю, что если бы я удалил сборки Preview 5 из GAC (и я не знаю, как они туда попали), прежде чем я запустил установщик, все могло бы быть в порядке. Стоит попробовать.

В случае маловероятного , когда кто-то еще настолько же глуп, как я и работает на Vista, вам, возможно, не потребуется взламывать реестр выше, чтобы удалить старые сборки - просто запустите gacutil из командная строка администратора. Doh!

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

Если вы используете Html.Form из сборки futures (Microsoft.Web.Mvc), вы можете столкнуться с именем в перечислении FormMethod. Например:

Html.Form<FooController>(c => c.Bar(), FormMethod.Post, new Hash(@class => "foobar"))

Это будет жаловаться на то, что FormMethod является неоднозначной ссылкой между Microsoft.Web.Mvc и System.Web.Mvc. Это довольно печально, потому что IMHO BeginForm не предоставляет жизнеспособную опцию из-за отсутствия переопределения, которое использует лямбда-выражение. Ваша единственная возможность - использовать магические строки, которые сопротивляются рефакторингу.

Лучшее решение, по-видимому, состоит в том, чтобы поместить в каждое представление, использующее FormMethod, следующее:

<%@ Import Namespace="FormMethod=Microsoft.Web.Mvc.FormMethod"%>

Тьфу. Надеюсь, это временно. Я ожидаю, что сборка фьючерсов может быть изменена для использования enum из System.Web.Mvc. Или еще лучше, надеюсь, они перегружают BeginForm для использования выражений.

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

Кажется, что Html.Image сломан. Начиная с предварительного просмотра 5 он был перенесен в сборку фьючерсов. Не могу представить, почему. Во всяком случае, ошибка:

Method not found: 'Void System.Web.Mvc.UrlHelper..ctor(System.Web.Mvc.ViewContext)'

Лучшее решение, которое я вижу, это заменить это:

<%=Html.Image("~/Content/Images/logo.jpg") %>

с этим:

<img src="<%=Html.ResolveUrl("~/Content/Images/logo_350.jpg")%>" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...