由於我從MVC 2升級到MVC 3 RC,使用TryUpdateModel會導致NullReferenceException。只有在將我的操作方法作爲單元測試的一部分運行時,纔會出現此問題。在實際服務器上運行它按預期工作。TryUpdateModel在ASP.NET MVC 3單元測試中拋出NullReferenceException
這裏是異常的堆棧跟蹤:
System.NullReferenceException:對象 引用未設置爲一個 對象的實例。在 System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext)at System.Web.Mvc.ValueProviderFactoryCollection。 <> C_ DisplayClassc.b _7(ValueProviderFactory 工廠)在 System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() 在 System.Collections.Generic.List 集合)在 System.Linq的。 Enumerable.ToList [TSource](IEnumerable`1 源)在 System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(controllerContext controllerContext)在 System.Web.Mvc.Controller.TryUpdateModel [TModel的](TModel的 模型,字符串前綴)
...我自己的代碼f ROM這裏....
在如此重要的情況下,我的控制器具有以下特徵:
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(int id, FormCollection collection)
{
}
我的猜測是,這與新路子DI工作在MVC3做的,但我無法弄清楚我做錯了什麼。也許在MVC 3中需要DI設置,但在MVC 2中不需要?
這不是一個好主意,因爲您要添加代碼以便將測試轉換爲生產代碼。它也會在每個請求中執行,而這完全沒有必要。 – 2012-07-16 21:05:20
爲什麼不在您的單元測試中使用「ValueProvider = ...」行來設置控制器。 – JoelFan 2012-11-28 21:06:22