.NET Core MVC通用控制器视图

时间:2017-07-25 11:08:22

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

尝试创建返回视图的通用.NET Core MVC控制器时,找不到视图(错误消息:"无法解析视图详细信息")。发生这种情况是因为通用控制器与特定视图无关。应该根据T是什么来挑选视图。我在ASP.NET中看到了一些这样的例子,但是我无法在.NET Core中重新创建它们。

在.NET Core中有解决此问题的好方法吗?

通用控制器示例:

public class ControllerBase<T> : Controller where T : class
{
    private IManager<T> _manager;

    public ControllerBase( IManager<T> manager)
    {
        _manager = manager;
    }

    public async Task<IActionResult> Details(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var result = await _manager.Get(id);
        return View(result);
    }
}

2 个答案:

答案 0 :(得分:0)

正如评论中已经提到的,您可以通过

指定要使用的视图
return View("viewName", result);

其中viewName应该适应您的要求(您的问题可能是类型参数的类型名称?

ViewEngine定位视图可能存在问题,具体取决于您放置视图的位置以及控制器的排列方式。但是你可以通过指定视图的完整路径来解决这个问题:

return View("~/Views/path/to/your/generic/viewName.cshtml", result);

或扩展ViewEngine中的搜索路径,如下所述: Can I specify a custom location to "search for views" in ASP.NET MVC?

答案 1 :(得分:0)

原始代码实际上按预期工作,我的问题是ReSharper报告了一个实际上没有任何错误的问题。我错过了它。

感谢大家的帮助。