gpt4 book ai didi

linq - 复杂对象上的 MvcContrib 网格排序

转载 作者:行者123 更新时间:2023-12-05 00:54:49 26 4
gpt4 key购买 nike

我正在尝试与 MvcContrib 合作网格控制。但是我似乎无法让排序对包含其他对象的复杂对象起作用。

我已经设置了类似于这个问题中的 OP 的 Controller /类/ View 。
Sorting with MVCContrib

我试图将 SortColumnName 用于我的 childobject.property,但它给了我一个错误,说我的主对象没有这个属性。这是我的代码片段

//POCO类

class Issue {
public int ID {get; get; }
.....
public int priorityId {get; set;}
public virtual Priority priority {get; set;}
}

// Controller 代码
    public ViewResult Index(int? pageNo, GridSortOptions sort)
{
var issues = db.issues.Include(i => i.priority);
ViewBag.sort = sort;

if (!string.IsNullOrEmpty(sort.Column))
{
issues = issues.OrderBy(sort.Column, sort.Direction);
}
return View(issues.ToList().AsPagination(pageNo ?? 1, 10));
}

//查看Grid的代码
@Html.Grid(Model).Sort(ViewBag.sort as GridSortOptions).Columns(column => {
column.For(issue => Html.ActionLink(" ", "Edit", new { id = issue.ID, areas = "Issues", controller = "Main"}, new { @id="editBtn"})).Named("Edit");
column.For(issue => Html.ActionLink(issue.ID.ToString(), "Edit", new {id = issue.ID, areas = "Issues", controller = "Main"})).Named("ID").Sortable(true);
column.For(issue => issue.priority.codeDesc).Named("Priority").SortColumnName("priority.codeDesc").Sortable(true);
}).Empty("No data found")

当我尝试对优先级字符串进行排序时,它给了我一个错误,说“priority.codeDesc 不是问题的属性”。

TIA

最佳答案

这里的问题实际上与网格无关,而是与作为 MvcContrib 排序扩展的一部分提供的 .OrderBy 扩展方法有关。这个扩展相当简单,我写它只是为了涵盖你想对对象的直接属性进行排序的简单情况,但是在你的情况下,你试图对嵌套属性(“priority.codeDesc”)进行排序,它不是'不支持 - 您不能在此扩展名中使用点表示法。

您要么需要切换到使用不同的机制来执行实际排序,或者如果这是一次性的情况,那么您可以对该特定列的排序逻辑进行硬编码(不理想,但如果它是一次性的那么它比编写新的排序机制更简单),例如:

if (!string.IsNullOrEmpty(sort.Column))
{
if(sort.Column == "priority.codeDesc")
{
issues = issues.OrderBy(x => x.priority.codeDesc);
}
else
{
issues = issues.OrderBy(sort.Column, sort.Direction);
}
}

关于linq - 复杂对象上的 MvcContrib 网格排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com