Результаты MVC Core Get Controller ViewModel - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь получить результат от Controller, который вызывает Repository, который в конце извлекает ViewModel, это для модульного тестирования.Выделенный жирным шрифтом ниже не работает.

Ошибка компиляции:

Результат IAction не содержит определения для View и метода расширения View не принимает первый аргумент типа IAction Result

public async Task<IActionResult> Search(int? id)
{
    return View(await _repository.GetProductData(id));
}

var searchresult1 = await _controller.Search(5);

var modelresult = searchresult1.View.ProductName;

1 Ответ

0 голосов
/ 21 мая 2018

попробуйте что-то вроде этого

var searchresult1 = await _controller.Search(5) as ViewResult;
var result = searchResult.ViewName; // this should be the value returned from the controller

Или вы можете вернуть результат как ViewData.Model.Таким образом, в вашем контроллере вы, вероятно, можете сделать что-то вроде

return View("Product", await _repository.GetProductData(id)); 

Затем в своем тесте вы можете получить доступ к viewdata.model, как

var result = await _controller.Search(5);
var productData = (ProductData) result.ViewData.Model; // cast it to whatever class the GetProductData(5) returns

Опция 1 работает во время выполнения как представлениеимя задается фреймворком с использованием данных маршрута.это не доступно во время модульного тестирования.Вот почему установка имени вида вручную во втором примере работает

Пожалуйста, ознакомьтесь с более подробной информацией о Модель представления MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...