Vì tôi đã nâng cấp từ MVC 2 lên MVC 3 RC, sử dụng TryUpdateModel gây ra một NullReferenceException. Vấn đề này chỉ xảy ra khi chạy phương pháp hành động của tôi như là một phần của một thử nghiệm đơn vị. Chạy nó trên máy chủ thực tế hoạt động như mong đợi.TryUpdateModel ném NullReferenceException trong ASP.NET MVC 3 đơn vị kiểm tra
Dưới đây là một chồng dấu vết của các ngoại lệ:
System.NullReferenceException: Object tài liệu tham khảo không được đặt để một thể hiện của một đối tượng . tại System.Web.Mvc.JsonValueProviderFactory.GetValueProvider (ControllerContext controllerContext) tại System.Web.Mvc.ValueProviderFactoryCollection. <> c_ DisplayClassc.b _7 (ValueProviderFactory nhà máy) tại System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext() tại System.Collections.Generic.List bộ sưu tập) tại System.Linq. Enumerable.ToList [TSource] (IEnumerable`1 nguồn) tại System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider (controllerContext controllerContext) tại System.Web.Mvc.Controller.TryUpdateModel [TModel] (TModel mô hình, string prefix)
... mã của riêng tôi f rom ở đây trên ....
Trong trường hợp vấn đề, điều khiển của tôi có chữ ký sau đây:
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult Edit(int id, FormCollection collection)
{
}
Tôi đoán là điều này đã làm với các phương pháp mới DI việc trong MVC3, nhưng Tôi không thể hiểu được tôi đang làm gì sai. Có lẽ có một cái gì đó về DI thiết lập đó là cần thiết trong MVC 3, nhưng không được yêu cầu trong MVC 2?
Đây không phải là một ý tưởng hay, bởi vì bạn đang thêm mã để tạo điều kiện thử nghiệm vào mã sản xuất. Nó cũng được thực hiện trên mọi yêu cầu, và nó hoàn toàn không cần thiết. –
Tại sao không chỉ sử dụng dòng "ValueProvider = ..." trong thiết lập bộ điều khiển của bạn trong các bài kiểm tra đơn vị của bạn. – JoelFan