Como retornar JSON de um componente View?

9

Estou tentando mover a lógica do controlador para uma classe de componente de exibição, mas o controlador retorna apenas JSON, para um widget do lado do cliente que é a interface do usuário do meu componente de exibição. Este é o código do controlador principal em que o problema é:

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

Isso está bem no controlador, mas a classe derivada ViewComponent não gosta do método Json return. Todos os exemplos que vejo usam return View(*<something>*) .

Os componentes de visualização não devem retornar respostas inteiras, então imagino que deveria ter um método Content return para retornar HTML puro pelo menos.

    
por ProfK 09.10.2017 в 08:10
fonte

1 resposta

4

Parece que isso pode ser feito retornando conteúdo, não uma visualização:

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));
}
    
por ProfK 15.10.2017 / 05:47
fonte