如何在C#中合并多个JsonResult并在AngularJS中按名称获取
我来帮你搞定这个问题!其实核心思路是不要直接合并多个JsonResult实例,而是先把你要返回的多个数据集打包成一个带命名属性的对象,再统一序列化成JSON返回。这样AngularJS那边就能轻松通过属性名获取对应列表了。
C#端:构造带命名列表的组合对象返回
你需要先把各个数据源(比如不同的列表)整合到一个匿名对象或强类型对象中,再返回这个对象的JsonResult,而不是尝试拼接多个JsonResult的输出(那样会生成无效的JSON)。
示例代码
public class DataController : Controller { public JsonResult GetCombinedLists() { // 模拟获取不同的数据集 var customerList = new List<Customer> { new Customer { Id = 1, Name = "John Doe", Email = "john@example.com" }, new Customer { Id = 2, Name = "Jane Smith", Email = "jane@example.com" } }; var orderList = new List<Order> { new Order { OrderId = 1001, CustomerId = 1, Total = 99.99 }, new Order { OrderId = 1002, CustomerId = 2, Total = 149.99 } }; // 打包成带命名属性的组合对象 var combinedData = new { Customers = customerList, Orders = orderList // 可以继续添加更多命名列表,比如Products、Categories等 }; // 返回组合对象的JsonResult(.NET Core可省略JsonRequestBehavior.AllowGet) return Json(combinedData, JsonRequestBehavior.AllowGet); } } // 对应的实体类(根据你的业务定义) public class Customer { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } } public class Order { public int OrderId { get; set; } public int CustomerId { get; set; } public double Total { get; set; } }
AngularJS端:通过名称获取对应列表
在AngularJS里,你只需要通过$http调用C#的接口,拿到响应后直接通过属性名访问对应的列表即可。
示例代码
// 定义AngularJS模块和控制器 var app = angular.module('MyApp', []); app.controller('DataController', ['$scope', '$http', function($scope, $http) { // 调用C#接口获取组合数据 $http.get('/Data/GetCombinedLists') .then(function(response) { // 通过属性名获取不同列表 $scope.customers = response.data.Customers; $scope.orders = response.data.Orders; // 现在可以在视图中直接使用这些变量,比如: // <div ng-repeat="customer in customers">{{customer.Name}}</div> }) .catch(function(error) { console.error('加载数据失败:', error); }); }]);
关键注意点
- 不要拼接JsonResult:每个
JsonResult都会生成独立的JSON结构,直接拼接会导致语法错误,必须先整合数据再序列化。 - 属性名要一致:C#组合对象的属性名(比如
Customers)要和AngularJS中访问的名称完全匹配(大小写敏感)。 - .NET Core适配:如果是.NET Core项目,返回
JsonResult时不需要JsonRequestBehavior.AllowGet,直接写return Json(combinedData);即可。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

