解决方法
我这样做:
var formElements = new NameValueCollection() { {"FirstName","Bubba"},{"MiddleName",""},{"LastName","Gump"} }; var fakeController = GetControllerContext(formElements); var valueProvider = new Mock<IValueProvider>(); var bindingContext = new ModelBindingContext(fakeController,valueProvider.Object,typeof(Guid),null,null); private static ControllerContext GetControllerContext(NameValueCollection form) { Mock<HttpRequestBase> mockRequest = new Mock<HttpRequestBase>(); mockRequest.Expect(r => r.Form).Returns(form); Mock<HttpContextBase> mockHttpContext = new Mock<HttpContextBase>(); mockHttpContext.Expect(c => c.Request).Returns(mockRequest.Object); return new ControllerContext(mockHttpContext.Object,new RouteData(),new Mock<ControllerBase>().Object); }
然后我刚刚将bindingContext变量传递给实现IModelBinder接口的对象的BindModel方法。