2010-02-19 13 views
10

Ho letto questo post e volevo utilizzare il metodo ControllerExtensions.RedirectToAction. Ma ho System.Security.VerificationException Che dice: tipo argomento '[Tipo MyController]' viola il vincolo del parametro di tipo 'T'.MVC Contrib VerificationException

mio controller è dichiarato come segue:

public class ProductsSearchController : Controller 
    { 
     ... 
    } 

Help me, per favore. Inoltre, ho provato a scaricare l'ultima libreria MvcContrib da here. Non mi ha aiutato.

Ho notato un fatto interessante. Ho questa eccezione solo quando si chiama da unit test. Ma non c'è eccezione quando si utilizza dal sito web. Tuttavia sembra non funzionare correttamente. Quando passo un oggetto all'azione in un'espressione come questa:

this.RedirectToAction(x => x.Index(filter)) 

basta chiamare .ToString di questo oggetto! E ho URL come questo:

ForniturePagina di filtrare = WebShop.FinderModel.Filters.ProductsFilter

Cosa c'è di sbagliato?

+1

Puoi mostrare la linea in cui stai reindirizzando? –

+0

restituisce this.RedirectToAction (x => x.Index (filtro)); – Serhiy

risposta

23

Ho riscontrato questo problema.

Stavo usando MvcContrib versione 2.0.95.0 insieme a System.Web.Mvc versione 4.0.30319.

Il problema era che MvcContrib fa riferimento a una versione precedente di System.Web.Mvc.

Se si utilizza una versione precedente di MvcContrib con Mvc 2, dovrebbe essere sufficiente scaricare e fare riferimento all'ultima versione di MvcContrib. Se si sta utilizzando .NET 4 e MVC 3 è necessario aggiornare il file app.config per il progetto test di unità (potrebbe essere necessario aggiungere uno) con il seguente: -

<configuration> 
... 

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

.... 
</configuration> 

Tenete a mente potrebbe essere necessario modificare i numeri di versione se si utilizza una versione diversa di MVC. (ad esempio, al momento di questa modifica è necessario utilizzare oldVersion="1.0.0.0-5.1.0.0" e newVersion="5.2.0.0").

Potrebbe anche essere necessario aggiungerlo al progetto web. Se ricevi solo un'eccezione nel tuo progetto di test, è probabile che questa sezione esista già e sia corretta nel tuo web.config; puoi copiarlo e incollarlo da lì.

Se si utilizza l'analisi del codice, è inoltre necessario vedere Assembly Binding Redirection and Code Analysis in modo che rispetti il ​​reindirizzamento dell'associazione.

+1

Stavo solo avendo questo problema e ho trovato questo post. Copiato il mio nodo di runtime dal progetto Mvc al file di configurazione del progetto di test dell'unità e tutto ha funzionato. Grazie anche a me :) –

+3

Questo funziona per MVC4 (in versione beta fino ad oggi) al momento. Cambia semplicemente olderversion in "1.0.0.0-3.0.0.0" e newVersion in "4.0.0.0". – klabranche

+0

grazie mille! –