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