mudar de asp.net mvc 1.0 -> 2.0 - estrutura s#arp
-
14-09-2020 - |
Pergunta
Eu tenho uma solução asp.net mvc mais antiga (estrutura s#arp) com dois projetos, um para web e outro para controlador.Alterei a dll para as versões mais recentes (2.0) para System.Web.MVC e Microsoft.Web.MVC.Também ajustei meu Web.Config:
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Isso é (em teoria) tudo que tenho que fazer?
A solução funciona bem, mas recebo este erro:
Tentativa de acessar um elemento como um tipo incompatível com o array.Descrição:Ocorreu uma exceção não tratada durante a execução da solicitação da web atual.Revise o rastreamento de pilha para obter mais informações sobre o erro e sua origem no código.
Detalhes da exceção:System.ArrayTypeMismatchException:Tentativa de acessar um elemento como um tipo incompatível com o array.
Erro de origem:
Linha 32:Linha 33:ViewEngines.Engines.Clear();Linha 34:ViewEngines.Engines.Add(new AreaViewEngine());Linha 35:Linha 36:ModelBinders.Binders.DefaultBinder = novo SharpModelBinder();
Isso pode não estar relacionado à opção mvc, mas à estrutura s#arp.Alguma ideia?Obrigado.
Muitas felicidades,
cristão
Solução
Este problema está relacionado à arquitetura S#arp.Você precisará obter a versão MVC2 do S#arp aqui: http://github.com/codai/Sharp-Architecture/downloads.O primeiro item da lista é o que você deseja, incluindo o modelo VS2010.(Observe o erro de digitação na descrição que diz ASP.NET 2, deveria ser ASP.NET MVC 2)
Espero que ajude.
P.S.Se você estiver curioso sobre a causa da exceção em si, confira este breve artigo: http://dotnetperls.com/arraytypemismatchexception.Eu suspeito (sem olhar para a fonte S#arp 1 e MVC2) que o SharpModelBinder
(a versão MVC1) agora é incompatível com a implementação MVC2 do MVC DefaultBinder
, e isso não é detectado em tempo de compilação porque SharpModelBinder
herda de DefaultBinder
e o compilador acha que está tudo bem.É somente em tempo de execução que a incompatibilidade real é detectada.