9

Tôi đang cố gắng di chuyển logic điều khiển vào một lớp thành phần khung nhìn, nhưng bộ điều khiển chỉ trả về JSON, cho một widget phía máy khách là giao diện người dùng của thành phần khung nhìn của tôi. Đây là cốt lõi mã điều khiển nơi mà vấn đề là:Làm thế nào để trả về JSON từ một thành phần xem?

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

Điều này là tốt trong bộ điều khiển, nhưng lớp ViewComponent có nguồn gốc không thích phương pháp Json trở lại. Tất cả các ví dụ tôi thấy sử dụng return View(*<something>*).

Xem các thành phần không được phép trả lại toàn bộ câu trả lời, vì vậy tôi sẽ tưởng tượng nó nên có phương thức trả về Content để trả về HTML thuần túy ít nhất.

+0

tài liệu: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view -components – Nkosi

+1

Thử thêm một số chi tiết khác về cách bạn dự định sử dụng thành phần trong khung nhìn. sẽ giúp đỡ trong việc cung cấp một câu trả lời. – Nkosi

+0

Tại sao bạn cần trả lại json từ thành phần của bạn? đó không phải là các thành phần được thiết kế cho. bạn cần phải trả lại khung nhìn (với mô hình tùy chọn) từ nó. xin vui lòng cung cấp xem của bạn quá, có lẽ thế hệ html trong viewcomponent có thể giúp (s bạn đã đề cập trong câu hỏi, bạn có thể trở về html tinh khiết từ InvokeAsync, nhưng nó sẽ giúp bạn?) – ingvar

Trả lời

2

Dường như nó có thể được thực hiện bằng cách trả lại nội dung, không một cái nhìn:

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)); 
} 
Các vấn đề liên quan