c# - MVC.Grid 可以使用动态列吗?
问题描述
我正在为 MVC5 应用程序构建一个用于查找表管理的接口。每个查找都封装在自己的模型中。希望/想法是我可以动态地将我选择的任何模型输入到包含MVC.Grid的单个 Razor 页面中。不幸的是,MVC.Grid 的语法要求我对给定模型的属性进行硬编码。
有没有办法为给定模型的每个属性动态添加一列?
@model IQueryable<Person>
@(Html
.Grid(Model)
.Build(columns =>
{
columns.Add(model => model.Name).Titled("Name");
columns.Add(model => model.Surname).Titled("Surname");
columns.Add(model => model.MaritalStatus).Titled("Marital status");
})
)
解决方案
这是我所期待的方向。
对于给定的模型...
public class Person
{
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Marital Status")]
public string MaritalStatus { get; set; }
[Display(Name = "Years Married")]
public int Years { get; set; }
}
我几乎可以像这样为模型的每个属性动态添加一列:
@model IQueryable<Person>
@(Html
.Grid(Model)
.Build(columns =>
{
foreach (var column in typeof(Person).GetProperties())
{
var type = typeof(Person);
var memInfo = type.GetMember(column.Name);
var attributes = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
var displayname = ((System.ComponentModel.DataAnnotations.DisplayAttribute)attributes[0]).Name;
columns.Add(m => m.GetType().GetProperty(column.Name).GetValue(m)).Titled(displayname);
}
})
.Filterable()
.Sortable()
)
但是......过滤器和排序已经消失,现在我不再对列进行硬编码。通过 JavaScript 添加事件监听器现在也失败了。模型属性的动态解析破坏了某些东西……强类型,也许?
在这个方向上有什么进一步的见解,有人吗?
推荐阅读
- python - 在不知道列表内容的情况下,多个列表需要交集
- linux - 从 linux 的命令行中修剪字符串中的最后一个单词
- uicollectionview - 在 `UIRefreshControl` 刷新时使用 `sectionHeadersPinToVisibleBounds` 会导致粘性标题的位置不正确
- if-statement - 一个 IF 语句,用于检查并执行 Windows 批处理文件中每个设置变量的命令
- android - 为什么列表视图后不能显示视图?
- python - 无法将函数返回值转换为 Python 类型
- python - Python 代码将变量传递给另一个 Python 可执行文件并返回输出
- visual-studio-code - 使用 Jupyter 时如何在 Visual Studio Code 中复制单元格?
- python - 从 cmd shell 管道到 python 脚本
- java - 为什么 Junit 5 模拟没有按预期工作