Как проверить ModelBinder в ASP.Net Mvc 3 - PullRequest
1 голос
/ 15 августа 2011

Я пытаюсь написать несколько тестов для пользовательского связывателя моделей, и, боже мой, это оказалось трудно заглушить.Ничто из того, что я нахожу в Интернете, не имеет прямого отношения к ASP.Net Mvc 3 или имеет тенденцию приводить к очень неполным примерам.

В частности, самая большая стена, на которую я попадаю, - это bindingContext.ModelType - ее установка явно бросаетошибка (во время выполнения), что сеттер устарел и что он выводится из параметра Model, но для меня параметр Model имеет и должен быть нулевым!

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Томас и Джордж, вы должны установить поставщика значений в ModelBindingContext.Ниже приведен пример кода в моем действии Индекс HomeController, который создает тип и использует механизм связывания модели по умолчанию для увлажнения объекта.Это просто упрощенная версия, в моем производственном коде я фактически ввожу параметр в действие контроллера, которое является типом, а затем динамически создаю тип на лету, прекрасно работает, когда вы хотите отправить более одного типа в одно действие контроллера,Обратите внимание, что ValueProvider и ControllerContext являются свойствами контроллера.

        HomeModel test = new HomeModel();
        ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(() => test, test.GetType());
        ModelBindingContext modelBindingContext = new ModelBindingContext { ModelMetadata = metadata, ValueProvider = ValueProvider};


        DefaultModelBinder defaultModelBinder = new DefaultModelBinder();
        defaultModelBinder.BindModel(ControllerContext, modelBindingContext);
0 голосов
/ 16 августа 2011

Хансельман объясняет это очень подробно здесь:

http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx

Обновление: приведенный выше образец устарел. Прочитайте комментарии к этой записи!

...