9

我想将控制器逻辑转移到视图组件类中,但控制器只返回JSON,作为我视图组件的UI的客户端小部件。这是核心控制器代码问题出在哪里:如何从View组件返回JSON?

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

这是好的控制器,但ViewComponent派生类不喜欢Json返回方法。我看到的所有例子都使用return View(*<something>*)

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

+0

文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view -components – Nkosi

+1

尝试在视图中添加一些关于您打算如何使用组件的更多详细信息。将有助于提供答案。 – Nkosi

+0

为什么你需要从你的组件返回json?这不是组件的设计目的。您需要从中返回视图(使用可选模型)。请提供您的看法,可能在viewcomponent中生成html代码可能会有所帮助(您提到的问题,您可以从InvokeAsync中返回纯HTML,但它会对您有帮助吗?) – ingvar

回答

2

它看起来像它可以通过返回的内容,而不是一个视图来完成:

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)); 
}