如何从View组件返回JSON?

Pro*_*ofK 9 c# json asp.net-core-mvc asp.net-core asp.net-core-viewcomponent

我正在尝试将控制器逻辑移动到视图组件类中,但控制器仅返回JSON,用于客户端窗口小部件,它是我的视图组件的UI.这是核心控制器代码,问题是:

public IActionResult TreeData(string dir = "")
{
    var browsingRoot = Path.Combine(_config.BaseDir, dir);
    var nodes = new List<TreeNode>();
    nodes.AddRange(RecurseDirectory(browsingRoot));
    return Json(nodes);
}
Run Code Online (Sandbox Code Playgroud)

这在控制器中很好,但ViewComponent派生类不喜欢Jsonreturn方法.我看到的所有例子都使用return View(*<something>*).

视图组件不应该返回整个响应,所以我想它应该有一个Content返回方法来至少返回纯HTML.

Pro*_*ofK 3

看起来可以通过返回内容而不是视图来完成:

public IActionResult TreeData(string dir = "")
{
    var browsingRoot = Path.Combine(_config.BaseDir, dir);
    var nodes = new List<TreeNode>();
    nodes.AddRange(RecurseDirectory(browsingRoot));
    return new ContentViewComponentResult(JsonConvert.SerializeObject(nodes));
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码给我一个错误,提示“无法将类型 [...]ContentViewComponentResult 隐式转换为 [...]IActionResult” (2认同)