MVC Core获取Controller ViewModel结果

时间:2018-05-21 02:40:23

标签: c# asp.net-mvc asp.net-core-mvc

我试图从Controller获取结果,该结果调用Repository,最后提取ViewModel,这是用于单元测试。下面的粗体不起作用。

编译错误:

  

IAction Result不包含View的定义,也没有扩展方法View接受IAction类型的第一个参数结果

Query: {
      groupMenuStatus: async (_, args, { cache }) => {
        const query = gql`
          query groupMenuStatus {
            groupMenuStatus @client {
              isOpen
            }
          }
        `;
        const res = cache.readQuery({ query });
        return res.groupMenuStatus;
      },
    },

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

1 个答案:

答案 0 :(得分:1)

尝试这样的事情

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 view model

的更多详情