Событие Button Onclick (которое находится в codbehind) не запускается в MVC 2 - PullRequest
1 голос
/ 04 мая 2010

У меня было веб-приложение MVC 1.0, которое было в VS 2008; Я только что обновил проект до VS 2010, который автоматически обновил MVC до 2.0.

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

т.е. У меня есть asp: кнопка с событием onclick, которое указывает на метод в коде позади. Когда вы нажимаете кнопку, событие onclick не запускается. Фактически, когда вы смотрите на переменную Page, IsPostBack имеет значение false.

Это действительно странно, и мне интересно, кто-нибудь знает, что случилось и как это исправить. Я думаю, что это как-то связано с изменениями в MVC 2.0; но я не уверен.

Любая помощь очень ценится, я пытался выяснить это некоторое время.

(удаление кодовых областей и перемещение их в контроллер на самом деле не вариант, так как страниц так много, возврат к vs 2008 - последнее средство, поскольку я хочу использовать некоторые функции VS 2010, такие как тестирование производительности .)

Ответы [ 2 ]

5 голосов
/ 04 мая 2010

Использование codebehind является нарушением шаблона MVC и не поддерживается. Тот факт, что это работало в MVC 1, является случайным и непреднамеренным.

Вы заметили, что проект слишком велик, чтобы удалить код и перенести эту логику в контроллеры. В качестве альтернативы, если вы обнаружите, что модель обратной передачи WebForms подходит для ваших страниц здесь, вы можете просто сделать эту часть своего веб-сайта WebForms (истинным .aspx без прохождения конвейера MVC). Это может быть проще, чем пытаться преобразовать эти страницы в MVC. Помните, что MVC и WebForms будут счастливо сосуществовать в одном приложении.

В противном случае, учитывая ваши временные ограничения, вам лучше всего вернуться к MVC 1 + VS2008.

2 голосов
/ 04 мая 2010

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

Все, кроме этого, ваш вопрос касается причины, по которой он больше не работает. Я собираюсь сделать дикое предположение, что это потому, что скрытые входные данные viewstate и eventvalidation не отправляются обратно на страницу. В Asp.Net 3.5 (следовательно, возможно, в Asp.Net 4) IsPostBack обнаруживается по этим двум скрытым значениям, а не по методу http, используемому для запуска страницы.

Тем не менее, ваша проблема здесь может заключаться в том, что Asp.Net 4 не нравится входящий запрос, а не проблема MVC2. Было внесено не так много изменений в способ отображения, только много дополнений.

Если веб-сайт был обновлен до версии Asp.Net 4 - узнайте, как вернуть его к версии 3.5, и посмотрите, исправляет ли это.

В противном случае, я думаю, что ответ Леви на возврат к 3.5 и MVC1 - ваша лучшая ставка.

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

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