2017-08-14 24 views
-2

我不知道我是否正确地问这个问题,但我会尽我所能解释并提供代码。将视图模型列表合并为一个

我在控制器上有一个ActionResult,它循环遍历每年可用的内容,打印出每个年份ID的结果,并循环直到完成,然后生成最终产品。

我遇到的问题是排序功能。它每年都会排序,而不是整个表格。我想到了解决这个问题的最简单方法,所以它只是一个模型而不是多个按年分隔的模型,以某种方式将列表合并成一个模型。

我对C#MVC很新,所以任何有用的提示,技巧和示例都将非常有帮助。另外,如果您需要任何其他代码,请询问我将提供它。

控制器

// list of models, because you want ALL of them 
      var managementModels = new List<CollectionsManagementViewModel>(); 
      var setupIds = _repository.GetAllYearSetupIds(); 

      foreach (var setupId in setupIds) 
      { 
       // new model created for each setup id 
       var managementModel = _repository.GetOverdueBalances(type,page, pageLength, 
         setupId.YearSetupId, balancefilter, 
         sort, direction == Constants.ascending, 
         spreadsheetType); 

       managementModel.Title = title + " Management"; 
       managementModels.Add(managementModel); // add model to list 
      } 

      // pass collection to view 

      return View("CollectionsManagement", new OverpayViewModel { CollectionsManagementViewModels = managementModels}); 

编辑 我有我的观点一个表,通过点击哪些列进行排序。目前,当选择列名时,对所有内容进行排序,但保留多年,例如2015年的4,5,6分类为4,5,6。然后在2016年,你有1,2,3,当你从那列中排序时,它不会对它进行排序1,2,3,4,5,6它对它进行排序,4,5,6,1,2,3因为它每年都会分类,而不是整个表格。

回答

1

你的问题对于什么都是有点含糊不清(例如,什么_repository支持等)。

不过,假设你得到了一堆这些CollectionsManagementViewModel S的,并且要通过一年显示之前对它们进行排序:

return View("CollectionsManagement", 
    new OverpayViewModel { 
     CollectionsManagementViewModels = 
      _repository 
      .GetAllYearSetupIds() 
      .Select(ysi => _repository.GetOverdueBalances(
       type, 
       page, 
       pageLength, 
       ysi.YearSetupId, 
       balanceFilter, 
       spreadsheetType) // Assuming the sort is optional 
      .OrderBy(vm => vm.Year) // Assuming that the vm has a more sensible year property to sort numerically 
    }); 

我真的不得不作出了很多假设你代码,所以请参阅How to create a minimal, viable, complete example以更好地了解您最有可能在此获得答案的方式。

+0

谢谢,我会根据需要编辑我的问题。这段代码非常优雅。 – CheezStix