2010-02-19 29 views
10

我讀過這個post,我想使用ControllerExtensions.RedirectToAction方法。但是我有System.Security.VerificationException其中說:類型參數'[MyController類型]'違反類型參數'T'的約束。MVC Contrib VerificationException

我控制器聲明如下:

public class ProductsSearchController : Controller 
    { 
     ... 
    } 

幫助我,請。 另外我試圖從here下載最新的MvcContrib庫。它沒有幫助我。

我注意到一個有趣的事實。我只有在從單元測試中調用時纔有這個異常。但從網站使用時也不例外。但它似乎不能正常工作。當我通過一個對象來表達這樣的動作時:

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

它只是調用這個對象的.ToString!我得到的網址是這樣的:

產品搜索過濾= WebShop.FinderModel.Filters.ProductsFilter

有什麼不對?

+1

您能否顯示您重定向的行? – 2010-02-19 19:20:02

+0

return this.RedirectToAction(x => x.Index(filter)); – Serhiy 2010-02-20 08:01:25

回答

23

我一直有這個問題。

我在使用MvcContrib版本2.0.95.0和System.Web.Mvc版本4.0.30319。

問題是MvcContrib引用了System.Web.Mvc的早期版本。

如果您使用Mvc 2的較舊版本的MvcContrib,它應該足以下載和引用最新版本的MvcContrib。如果您在使用.NET 4和MVC 3,你需要更新你的單元測試項目app.config文件(你可能需要添加一個)與下列內容: -

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

請牢記如果您使用的是不同版本的MVC,則可能需要更改版本號。 (例如,在編輯時您需要使用oldVersion="1.0.0.0-5.1.0.0"newVersion="5.2.0.0")。

您可能還需要將其添加到您的Web項目中。如果你只是在你的測試項目中得到異常,那麼很可能這部分已經存在,並且在web.config中是正確的;你可以從那裏複製和粘貼。

如果您使用的是代碼分析,您還需要查看Assembly Binding Redirection and Code Analysis以便它遵守綁定重定向。

+1

只是有這個問題,發現這個職位。將我的運行時節點從Mvc項目複製到單元測試項目配置文件,它都可以工作。感謝我:) – 2011-07-08 07:33:41

+3

這也適用於MVC4(目前爲beta版)。只需將olderversion更改爲「1.0.0.0-3.0.0.0」,將newVersion更改爲「4.0.0.0」。 – klabranche 2011-11-30 17:44:08

+0

謝謝soo! – 2011-12-28 09:09:38