Показаны сообщения с ярлыком ASP.NET MVC 3. Показать все сообщения
Показаны сообщения с ярлыком ASP.NET MVC 3. Показать все сообщения

четверг, 6 ноября 2014 г.

Ошибка с System.Web.Mvc версия 4.0.0.1 (не компилируется проект)

Ситуация
Не компилируется ASP.NET MVC проект. Компилироваться перестал внезапно, без каких-то действий с моей стороны.

Изучение вопроса
Виновника проблемы нашел относительно быстро. Им оказался Microsoft, а точнее автоматический Windows Security update. Update.
Microsoft подменило версию библиотеки System.Web.Mvc с 4.0.0.0 на 4.0.0.1
(на самом деле точно такое-же произошло и с третьей версией 3.0.0.0 поменялось на 3.0.0.1 но у меня нет проектов на MVC 3, но решение, думаю будет аналогичным).

Ссылки по теме
Windows update caused MVC3 and MVC4 stop working
http://stackoverflow.com/questions/26393157/windows-update-caused-mvc3-and-mvc4-stop-working
System.Web.Mvc broken after security update
https://social.msdn.microsoft.com/Forums/vstudio/en-US/eba2bb36-762c-461b-8104-5ce45a3a3f67/systemwebmvc-broken-after-security-update?forum=netfxsetup


Не помогло
по ссылкам советовали автоматически установить нужную версию из nuget.
Но у меня этот способ не сработал - nuget выдавал ошибку.


Решение, которое помогло мне

1. Заменил ссылку на библиотеку:
во всех проектах удалил ссылку (reference) на старую библиотеку и добавил ссылку на System.Web.Mvc 4.0.0.1
(после этого проекты хотя бы стали компилироваться)

2. Поправил конфиг-файлы:
Тут правил основной web.config и web.config из папки Views
суть исправлений: делал поиск по строке System.Web.Mvc и менял 4.0.0.0 на 4.0.0.1.

После этого заработало локально

3. Сделал так чтобы библиотека копировалась в bin директорию проекта:
В свойствах (properties) добавленного файла (System.Web.Mvc) установил значение
Copy Local = true

после этих изменений и паблиша заработало на удаленном хостинге.

Вопросы/пожелания принимаются в комментариях

суббота, 16 ноября 2013 г.

вторник, 12 ноября 2013 г.

Проблема перехода с MVC3 на MVC 4 : Не вызывается событие ExecuteCore

Проблема
Переводил MVC3 проект на MVC4 (сам переход описан в статье Переход с ASP.NET MVC 3 на MVC4). Столкнулся с проблемой: перестало вызываться событие ExecuteCore (у меня на нем был завязан код инициализации контроллера).

Решение
перешел на событие BeginExecuteCore

На практике сделал поиск и замену во всем проекте 2-х строк
1.
protected override void ExecuteCore()
заменил на
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)

2.
base.ExecuteCore();
заменил на
return base.BeginExecuteCore(callback, state);


Ссылки по теме
помогло это обсуждение
http://stackoverflow.com/questions/9555069/executecore-in-base-class-not-fired-in-mvc-4-beta

понедельник, 11 ноября 2013 г.

Переход с ASP.NET MVC 3 на MVC4 (с VS 2010 на VS2012)

Задача
Перенести проект с MVC 3 на MVC4 (с VS 2010 на VS2012)

Решение
1. Смена студий с Visual Studio 2010 на Visual Studio 2012
Переоткрыл солюшн в новой студии. Студия сама сделала перконвертацию. У меня обошлось без ошибок

2. Смена MVC 3 на MVC 4
Использовал NuGet пакет
Auto Upgrade MVC 3 To MVC 4 version 1.0.1
https://www.nuget.org/packages/UpgradeMvc3ToMvc4

В окне Manage NuGet Packages в поиске ввел "upgrade". Нужный плагин нашелся на первой странице.

3. Правка кода
3.1. Не вызывается событие ExecuteCore
Предыдущие этапы у меня прошли гладко.Но столкнулся с проблемой.
Суть: перестало вызываться событие ExecuteCore
Обращу внимание: у Вас этой проблемы может не возникнуть, если вы не использовали ExecuteCore.
Решение описал в статье:
Проблема перехода с MVC3 на MVC 4 : Не вызывается событие ExecuteCore

3.2. Ошибка компилятора Compiler Error Message: CS1513: } expected
Тут просто компилятор ведет себя по другому.

теперь код вью нужно поправить в соответствии с рекомендациями

Dont : @{if(check){body}}
Recommended : @if(check){body}

Dont : @if(@variable)
Recommended : @if(variable)

Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }


обсуждение
http://stackoverflow.com/questions/12809855/issue-migrating-mvc3-application-to-mvc4-compiler-error-message-cs1513-expe

3.3. Ненужная валидация hidden полей
Стала работать валидация hidden полей. она мне не была нужна
Она была мне не нужна, поэтому отключил её.

$(document).ready(function () { 
    //-- отключаю валидацию скрытых полей в форме
    $.validator.setDefaults({ ignore: 'input:hidden' });
});

тут помогло обсуждение
http://stackoverflow.com/questions/10136342/perform-validation-on-hidden-fields


Ссылки по теме
В этом обсуждении подсмотрел ссылку на пакет Auto Upgrade MVC 3 To MVC 4
http://stackoverflow.com/questions/8853330/converting-a-asp-net-mvc-3-project-to-mvc-4


Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4 - этой статьей честно говоря не воспользовался