Проблемы во время ASP.NET обновление MVC от предварительного просмотра 5 к бете?

Оказывается, что php72 не поддерживает выполнение скриптов напрямую для стандартной среды. Все должно пройти через пользовательский FrontController. Поэтому я создал один FrontController, который обрабатывает практически все маршруты. Ниже приведен код, который я положил в index.php. Он будет обрабатывать все указанные маршруты.

switch (@parse_url(

Оказывается, что php72 не поддерживает выполнение скриптов напрямую для стандартной среды. Все должно пройти через пользовательский FrontController. Поэтому я создал один FrontController, который обрабатывает практически все маршруты. Ниже приведен код, который я положил в index.php. Он будет обрабатывать все указанные маршруты.

[110]

Вы можете найти примеры для php72 для пользовательского FrontController и для различных фреймворков здесь. https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/php72

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

SERVER['REQUEST_URI'])['path']) { case '/': require 'login.php'; break; case '/product.php'; require 'product.php'; break; default: break; }

Вы можете найти примеры для php72 для пользовательского FrontController и для различных фреймворков здесь. https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/php72

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

9
задан Kara 23 March 2016 в 23:00
поделиться

19 ответов

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

Изменения, внесенные между предварительным просмотром CodePlex 5 и бетой

  • Измененный проверка по умолчанию обменивается сообщениями, чтобы быть большим количеством дружелюбного конечного пользователя.
  • Переименованный CompositeViewEngine к AutoViewEngine.
  • Добавленный свойство Url к Контроллеру типа UrlHelper. Это делает удобным генерировать основанные на маршрутизации URL из контроллера.
  • Добавленный абстрактный базовый класс ActionNameSelectorAttribute, который служит базовым типом для ActionNameAttribute. Путем наследования этому основному классу атрибута можно создать пользовательские атрибуты, которые участвуют в выборе действия по имени.
  • Добавленный новый метод ReleaseView к IViewEngine, который позволяет пользовательским механизмам представления быть уведомленными, когда представление сделано, представив. Это полезно для очистки или для объединяющих представление сценариев.
  • Переименованный в метод ControllerBuilder DisposeController к ReleaseController для установки шаблону, который устанавливается для механизмов представления.
  • Удаленный большинство методов на классе HtmlHelper, преобразовывая их в дополнительные методы класса HtmlHelper вместо этого. Эти методы существуют в новом пространстве имен (System.Web.Mvc.Html). Если Вы мигрируете от Предварительного просмотра 5, необходимо добавить следующий элемент к разделу пространств имен файла Web.config: <add namespace="System.Web.Mvc.Html"/> Это позволяет Вам полностью заменить наши вспомогательные методы Вашим собственным.
  • Измененный образцовый редактор связей по умолчанию (DefaultModelBinder) для обработки составных типов. Интерфейс IModelBinder был также изменен для принятия единственного параметра типа ModelBindingContext.
  • Добавленный новое перечисление HttpVerbs, которое содержит обычно используемые глаголы HTTP (ДОБИРАЮТСЯ, ОТПРАВЬТЕ, ПОМЕСТИТЕ, УДАЛИТЕ, ГОЛОВА). Также добавленный перегрузка конструктора к AcceptVerbsAttribute, который принимает перечисление. Перечисляемые значения могут быть объединены. Поскольку возможно ответить на глаголы HTTP, которые не включены в перечисление, AcceptVerbsAttribute сохраняет конструктора, который принимает массив строк в качестве параметра. Например, следующий отрывок показывает метод действия, который может ответить и на POST и ПОМЕСТИТЬ запросы.

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

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

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

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

  • Добавленный перегрузка для ViewDataDictionary. Метод оценки, который принимает строку формата.
  • Удаленный свойство ViewName из класса ViewContext.
  • Добавленный интерфейс IValueProvider для поставщиков значения, наряду с реализацией по умолчанию, DefaultValueProvider. Оцените значения предоставления поставщиков, которые используются образцовыми редакторами связей при привязке с объектом модели. Метод UpdateModel Класса контроллера был обновлен, чтобы позволить Вам указывать пользовательского поставщика значения.
6
ответ дан 4 December 2019 в 06:20
поделиться

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

0
ответ дан 4 December 2019 в 06:20
поделиться

Это кажется тем HTML. Изображение повреждается. С предварительного просмотра 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")%>" />
0
ответ дан 4 December 2019 в 06:20
поделиться

В конструкторе ViewContext существует повреждающееся изменение. Это изменилось от:

ViewContext (контекст ControllerContext, представьте в виде строки viewName, видеоданные ViewDataDictionary, TempDataDictionary tempData),

кому:

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

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

представление var = ViewEngines. DefaultEngine. FindView (controllerContext, viewName, пустой указатель);

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

1
ответ дан 4 December 2019 в 06:20
поделиться

О проблеме Autofac. Существует поток на autofac дискуссионной группе о потребности обновить фабрику контроллера, чтобы быть совместимым с Бета-версией платформы MVC

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

Я надеюсь, что они отправляют новую версию очень очень скоро :-)

1
ответ дан 4 December 2019 в 06:20
поделиться

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

Я нашел необходимый блок (Microsoft. Сеть. Mvc) http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&ReleaseId=18459

1
ответ дан 4 December 2019 в 06:20
поделиться

Если Вы используете HTML. Форма от блока фьючерсов (Microsoft. Сеть. Mvc), Вы могли бы получить коллизию имени на перечислении FormMethod. Например:

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

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

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

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

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

0
ответ дан 4 December 2019 в 06:20
поделиться

Это теперь повреждается:

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

В Предварительном просмотре 5 вышеупомянутого связало бы значение ViewData. Модель. Имя к текстовому полю. Это все еще работает:

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

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

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

На самом деле это не действительно безопасно. Если существует какой-либо случайный ViewData. Модель могла бы быть пустой, необходимо сделать что-то вроде этого:

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

Это изменение кажется в противоречии с примечаниями Бета-версии:

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

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

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

1
ответ дан 4 December 2019 в 06:20
поделиться

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

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

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

0
ответ дан 4 December 2019 в 06:20
поделиться

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

1
ответ дан 4 December 2019 в 06:20
поделиться

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

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

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

Никакая идея, если фиксация возможна, но наклон, не продолжается, пока это не фиксируется......

1
ответ дан 4 December 2019 в 06:20
поделиться

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

1
ответ дан 4 December 2019 в 06:20
поделиться

Я пытаюсь узнать, как новый 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
ответ дан 4 December 2019 в 06:20
поделиться

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

2
ответ дан 4 December 2019 в 06:20
поделиться

Игнорируйте это... Я - проигравший - это - Microsoft ASP.net в программных файлах... не просто ASP.net

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

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

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

Кто-либо имеющий подобную проблему?

2
ответ дан 4 December 2019 в 06:20
поделиться

Я испытал ту же проблему, как Будет и должен был сделать подобные вещи как его, включая копирование dlls к папке мусорного ведра.

Теперь вещи работают во внутреннем сервере vs.net, но заставляют IIS7 отказывать.

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

<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
5
ответ дан 4 December 2019 в 06:20
поделиться

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

На моем существующем проекте я на самом деле должен был вручную переместить Бета файлы в папку Bin. По любой причине, просто просмотрев к нему с Добавляют, что Ссылка не работала...

1
ответ дан 4 December 2019 в 06:20
поделиться

Все, что я должен был сделать, было обновить блоки от

Бета %ProgramFiles %\Microsoft ASP.NET \ASP.NET MVC

Также получите новую Microsoft. Сеть. 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; пространство имен

Мой материал основан на Витрине Rob Conery MVC, таким образом, любой использующий, который должен смочь следовать за вышеупомянутым.

Надежда это помогает кому-то там.

4
ответ дан 4 December 2019 в 06:20
поделиться

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

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

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

Это ВСЕ ЕЩЕ не решило проблему. У меня были к переADD ссылки СНОВА. Теперь его работа.


Только быть ясным!!! Бета блоки были отброшены под Программными файлами, в то время как более старая версия Системы. Сеть. Mvc был в GAC.


11
ответ дан 4 December 2019 в 06:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: