2010-02-19 3 views
10

Ich habe dieses post gelesen und ich wollte ControllerExtensions.RedirectToAction-Methode verwenden. Aber ich habe System.Security.VerificationException Das sagt: Typ Argument '[MyController Typ]' verletzt die Einschränkung des Typs Parameter 'T'.MVC Contrib VerificationException

Mein Controller erklärt sich wie folgt:

public class ProductsSearchController : Controller 
    { 
     ... 
    } 

Helfen Sie mir, bitte. Ich habe auch versucht, die neueste MvcContrib-Bibliothek von here herunterzuladen. Es hat mir nicht geholfen.

Ich bemerkte eine interessante Tatsache. Ich habe diese Ausnahme nur beim Aufruf von Komponententests. Aber es gibt keine Ausnahme bei der Verwendung von der Website. Es scheint jedoch nicht richtig zu funktionieren. Wenn ich ein Objekt in die Action im Ausdruck wie folgt passieren:

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

nennen es nur .ToString dieses Objekt! Und ich bekomme wie diese URL:

Warensuchfilter = WebShop.FinderModel.Filters.ProductsFilter

Was ist falsch?

+1

Können Sie die Linie anzeigen, in die Sie umleiten? –

+0

Rückgabe this.RedirectToAction (x => x.Index (Filter)); – Serhiy

Antwort

23

Ich habe dieses Problem.

Ich verwendete MvcContrib Version 2.0.95.0 neben System.Web.Mvc Version 4.0.30319.

Das Problem war, dass MvcContrib eine frühere Version von System.Web.Mvc verweist.

Wenn Sie eine ältere Version von MvcContrib mit Mvc 2 verwenden, sollte es ausreichen, die neueste Version von MvcContrib herunterzuladen und darauf zu verweisen. Wenn Sie mit .NET 4 und Mvc 3 Sie werden die App.Config Datei für Ihr Gerät Testprojekt aktualisieren müssen (können Sie einen hinzufügen) mit den folgenden: -

<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> 

Beachten Möglicherweise müssen Sie die Versionsnummern ändern, wenn Sie eine andere Version von MVC verwenden. (z. B. müssen Sie zum Zeitpunkt dieser Änderung oldVersion="1.0.0.0-5.1.0.0" und newVersion="5.2.0.0" verwenden).

Möglicherweise müssen Sie dies auch zu Ihrem Webprojekt hinzufügen. Wenn Sie nur die Ausnahme in Ihrem Testprojekt erhalten, besteht die Möglichkeit, dass dieser Abschnitt bereits existiert und in Ihrer web.config korrekt ist. Sie können es von dort kopieren und einfügen. Wenn Sie die Codeanalyse verwenden, müssen Sie auch Assembly Binding Redirection and Code Analysis sehen, damit die Bindungsumleitung eingehalten wird.

+1

War gerade dieses Problem und fand diesen Beitrag. Habe meinen Runtime-Knoten aus dem Mvc-Projekt in die Config-Datei des Unit-Test-Projekts kopiert und alles hat funktioniert. Danke auch von mir :) –

+3

Dies funktioniert auch für MVC4 (in der Betaversion von heute). Ändere einfach die ältere Version auf "1.0.0.0-3.0.0.0" und newVersion auf "4.0.0.0". – klabranche

+0

danke soo viel! –