【问题标题】:How I can apply PagedList to a viewModel class instead of a Model class如何将 PagedList 应用于 viewModel 类而不是 Model 类
【发布时间】:2013-08-09 14:17:27
【问题描述】:

我正在使用连接到两个不同数据库的两个上下文类。但是在我的索引视图中,我需要从两个数据库中获取信息,然后将分页应用于连接结果。为此,我定义了以下 viewModel 类:-

public class RackJoinList
{
  public IEnumerable<TMSRack> Racks { get; set; } // from the first database
  public IEnumerable<Resource> Resources { get; set; } //from the second database
}

以及以下用于填充 ViewMaodel 对象的存储库方法:-

 public RackJoinList AllFindRacks_j(string q,bool forautocomplete=false)
 {
   RackJoinList rjlist = new RackJoinList();
   var racks = from rack in tms.TMSRacks.Where(
                a => a.Technology.Tag.ToUpper()
                  .StartsWith(q.ToUpper()) || (q == null)
               )
               select rack;

    rjlist.Racks = racks.ToList();
    var resources = from resource in entities.Resources
                    join c in rjlist.Racks
                    on resource.RESOURCEID equals c.Technology.IT360ID
                    select resource;
    rjlist.Resources = resources;
    return rjlist;
 }

最后我有以下Action方法:-

 public ActionResult Index(string searchTerm=null, int page = 1)
 {
   var racks = repository.AllFindRacks_j(searchTerm)
                 .OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5) ;

   return View(racks);
 }

但上述操作方法会引发错误,因为我无法将 order by 和 Ipagedlist 应用于非列表对象。那么任何人都可以就如何解决我的问题提出建议,主要是:-

  1. 加入来自不同数据库的上下文类。

  2. 将分页应用于连接结果。

感谢 adbacne 提供的任何帮助。

【问题讨论】:

标签: asp.net-mvc linq entity-framework


【解决方案1】:

所以,你有:

public class RackJoinList
{
  public IEnumerable<TMSRack> Racks { get; set; } // from the first database
  public IEnumerable<Resource> Resources { get; set; } //from the second database
}

再添加一个 ViewModel:

public class Pagedclass
{
public IPagedList<RackJoinList> mylist {get; set;}
}

在你的 ActionResult 中:

public ActionResult Index(string searchTerm=null, int page = 1)
 {
   var racks = repository.AllFindRacks_j(searchTerm)
                 .OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5) ;

var model = new Pagedclass
{
mylist = racks
};

   return View(model);
 }

你的视图应该是从 Pagedclass 中输入的:@model YourProject.ViewModels.Pagedclass

已编辑:

public ActionResult Index(string searchTerm=null, int page = 1)
     {
       var racks = repository.AllFindRacks_j(searchTerm);

      var _racks = racks.OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5)

    var model = new Pagedclass
    {
    mylist = _racks
    };

       return View(model);
     }

【讨论】:

  • 感谢您的回复,但这会在操作方法中的 .OrderBy 上引发以下错误 ::- :-Error 7 'TMS.ViewModels.RackJoinList' 不包含 'OrderBy' 的定义并且找不到接受“TMS.ViewModels.RackJoinList”类型的第一个参数的扩展方法“OrderBy”(您是否缺少 using 指令或程序集引用?) C:\Users\Administrator\documents\visual studio 2012\Projects \TMS\TMS\Controllers\RackController.cs 34 33 TMS
  • @Asp.netmvcAsp.netmvc 尝试将您在操作中的查询分为两部分。我已经更新了我的答案。可能会有所帮助
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2014-09-27
  • 2019-12-15
相关资源
最近更新 更多