【问题标题】:How to Create a PagedList from a VarChar(MAX) field如何从 VarChar(MAX) 字段创建 PagedList
【发布时间】:2019-07-24 00:03:38
【问题描述】:

我有一个带有 VARCHAR(MAX) 字段的数据库表,我希望能够使用 PagedList 在 MVC 视图中对该数据进行分页,我希望在 x 字符处分页。我猜这样做不会很漂亮。我的模型返回 MasterId int、contentData VarChar(MAX) 和其他一些字段。 我想知道如何将 varchar(max) 字段转换为几页(数据中有一个分页符)。

我在想,因为我的模型只包含一个 contentData,尝试使用 PagedList 可能不起作用。

我应该尝试一下吗? 我是否应该硬着头皮重新设计数据库表,然后重新设计相关的 CRUD 代码?

我想我最终可能会选择后一种选择 - 除非有人指出我有一个很好的方法来做到这一点。

【问题讨论】:

    标签: c# asp.net-mvc pagedlist


    【解决方案1】:

    我不会对其进行分页,而是做一些事情来显示部分数据并更新视图。

    你还没有说为什么,所以我会假设在大多数情况下不会发送比对用户有用的更多的数据。

    假设:一个类 类似于:

    public class ContentView 
    {
       public int Id {get; set;}
       public string Content {get; set; }
       public DateTime LastEditedTime { get; set; }
    }
    

    你可以查询(我心血来潮的伪代码):

     dbContext.Books.Join(EditHistory, b => b.Id, e => e.BookId, (b,e) => new {b, e})
       .Select(new ContentView() {Id = b.Id, 
       content = b.Exceprt.Substring(0, Math.Min(b.Exceprt.Length, 100)),
       LastEditedTime = e.ModifiedTime}).ToList();
    

    所以这里的字符串是 100 个字符。

    然后在视图中有一个通过按钮(例如放大镜或椭圆)调用的方法,该方法使用 ID 调用 API/数据库并返回全文。

    如果你必须分页:

    string content 替换为类似于:

    public class Content 
    {
       public int Page { get; set; }
       public string BookText { get; set; }
    }
    

    然后每次单击按钮时,查询都可以获取更多数据并追加:

    return db.Books.Where(w => w.Id == id)
    .Select(s => new Content() {
       BookText = s.Passage.substring(page * 100, page + 1 * 100),
       Page = page++ );
    

    或从0到当前页码*每页字符数的类似子字符串并替换现有内容。

    【讨论】:

      猜你喜欢
      • 2011-09-15
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多