2014-12-30 3 views
0

Я приложение mvc4, которое отлично работает в обычном сценарии.MVC неправильный вид/модель, которая называется

Однако, по сценарию я буду описывать I'm получаю следующее сообщение об ошибке:

The model item passed into the dictionary is of type 
softWrench.sW4.Web.Models.LoginHandler.LoginHandlerModel', but this dictionary 
requires a model item of type 'softWrench.sW4.Web.Models.Home.HomeModel'. 

, чтобы воспроизвести его (только на FF или IE)

  1. Вход в приложение (который вызывает LoginController и LoginModel, затем выполняет немедленную переадресацию на HomeController/HomeModel)
  2. Нажмите кнопку backspace/back -> пользователь вернется на страницу входа
  3. Попробуйте снова войти в систему с неправильным именем пользователя/паролем. Под обычными вещами, которые просто принесут сообщение об ошибке на экране , но здесь я получаю исключение.

Мне кажется, что по какой-то причине в MVC, ссылающегося на Index.cstml в HomeController, а не IndexController один ...

В Chrome, однако, когда я попал в забой I автоматически переадресовывается на HomeController, а не на страницу входа, поэтому воспроизвести его невозможно. Причина в том, что, по-видимому, chrome делает дополнительный запрос сервера LoginController при ударе backspace, и это просто не происходит в FF и IE; Поскольку пользователь все еще аутентифицирован, я перенаправляю его на HomeController на этот дополнительный запрос; Если бы FF и IE сделали этот запрос в обратном пространстве, я бы тоже с ним справился ...

Я подтверждаю, что приложение работает нормально, за исключением этого сценария backspace, так что, похоже, грубые ошибки, такие как опечатки или неправильные модели, вызываются в коде.

Я отлажена сценарий, но couldn't найти любую вещь до сих пор, HomeController разве называется, просто LoginController, и это должно быть перенаправляется на Index.cshtml его ....

+1

Пожалуйста, разместите ваш контроллер и просмотрите код, связанный с ним? Это поможет нам легко решить проблему. – Aravindan

+0

Hi @Aravandian может исправить это в конце. Спасибо –

ответ

0

В конце концов, я мог бы это исправить. Здесь было трудно описать это полностью, и для этого мне жаль.

Я забыл упомянуть, что у меня был избыточный эффект RazorViewEngine, который проверял, чтобы пользователь не аутентифицировался, чтобы вернуть пустой шаблон бритвы.

В описанном выше сценарии пользователь все еще был аутентифицирован и, следовательно, он возвращал неправильный шаблон бритвы вместо нуля. Этот шаблон бритвы (Layout.cshtml) был поводом для запроса неправильной модели.

Я сделал дополнительную проверку для ViewPath, содержащего SignIn, чтобы также вернуть значение null, и это покрыло этот дополнительный случай.

2

Модель элемент, переданный в словарь, имеет тип softWrench.sW4.Web.Models.LoginHandler.LoginHandlerModel, но для этого словаря требуется элемент модели типа softWrench.sW4.Web.Models.Home.HomeModel.

Эта ошибка просто означает, что вы проходите мимо LoginHandlerModel, когда требуется HomeModel. Существует несоответствие между передачей модели зрения и strongly type связывают вид

+0

Да, вы были правы, это было немного сложнее поймать здесь. Спасибо –

+0

@LuizRolim Отлично. –

Смежные вопросы