c# - 如何从 VarChar(MAX) 字段创建 PagedList
问题描述
我有一个带有 VARCHAR(MAX) 字段的数据库表,我希望能够使用 PagedList 在 MVC 视图中对该数据进行分页,我希望在 x 字符处分页。我猜这样做不会很漂亮。我的模型返回 MasterId int、contentData VarChar(MAX) 和其他一些字段。我想知道如何将 varchar(max) 字段转换为几页(数据中有分页符)。
我在想,因为我的模型只包含一个试图使用 PagedList 的 contentData 可能不起作用。
我应该尝试这个吗?我是否应该硬着头皮重新设计数据库表,然后重新设计相关的 CRUD 代码?
我想我可能最终会选择后一种选择 - 除非有人指出我有一种很好的方式来做到这一点,因为它存在。
解决方案
我不会对其进行分页,而是做一些事情来显示部分数据并更新视图。
您还没有说为什么,所以我会假设在大多数情况下不会发送比对用户有用的数据更多的数据。
假设:一个类类似于:
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 到当前页码 * 每页字符数的类似子字符串,并替换现有内容。
推荐阅读
- python - 计算一个类的函数被执行的次数
- mongodb - 使用 Rust Mongo 驱动程序原型时,如何将 chrono::DateTime 字段序列化为 ISODate?
- c - 从字符串中删除括号中的文本?
- r - 使用 ggcontour 在数据集上叠加树
- javascript - 阻止对文件 css 和 javascript 的直接访问
- ios - Objective-C 中方法 [DJIRemoteController setCustomButtonTags:withCompletion] 的标签中可以使用哪些值?
- java - JUnit测试一个void方法?
- elasticsearch - 是否不可能索引属性具有多个字段的文档,其中一个是具有上下文的完成类型?
- docker - IdentityServer4:无法从“{servicename}.well-known/openid-configuration”获取配置。码头工人问题
- maven - 如何为 mvn 修复“java.lang.ClassNotFoundException: org.apache.maven.model.io.xpp3.MavenXpp3WriterEx”帮助评估