asp.net-mvc – 在Asp MVC Telerik网格和实体框架中处理枚举
发布时间:2020-12-16 06:24:44 所属栏目:asp.Net 来源:网络整理
导读:对于开发中的Web应用程序(ASP.Net MVC),我正在使用telerik网格.网格绑定到我的列表的IQueryable,因为它是一个大表,我希望telerik在列表中应用它的过滤器,然后执行此结果,而不是下载10’000行(使用连接的表),然后使用过滤器,仅使用行. 我正在使用(我真的需要
|
对于开发中的Web应用程序(ASP.Net MVC),我正在使用telerik网格.网格绑定到我的列表的IQueryable,因为它是一个大表,我希望telerik在列表中应用它的过滤器,然后执行此结果,而不是下载10’000行(使用连接的表),然后使用过滤器,仅使用行.
我正在使用(我真的需要它用于此页面,这是关键功能之一)网格的过滤器/顺序. 主列之一(确定数据类型)是枚举. 问题是,当我尝试过滤/排序时,我得到“linq to entity”中不支持“指定的类型成员”. 我要将它绑定在枚举(而不是映射的int)上,因为如果我使用id,过滤器/ order by将在int上,我不能指望用户知道外表的id. 我只是无法再次实现自己所有网格参数(位于网址)(我假设,它要么我做所有事情,要么什么都没有)并正确过滤它,正确地订购它). 你有解决方法吗? 解决方法
我不知道你的实体模型是怎样的,但我想你会有类似这样的模型:
public partial class Project
{
public int Id { get; set; }
public string Name { get; set; }
public int Status { get; set; }
}
并且Status属性表示你的枚举值,那么你就是这个枚举: public enum ProjectStatuses
{
Current = 1,Started = 2,Stopped = 3,Finished = 4,}
然后就像这样创建新的ViewModel: public class ProjectDetails
{
public int Id { get; set; }
public string Name { get; set; }
public int Status { get; set; }
public ProjectStatuses StatusValue { get { return (ProjectStatuses) Status; } }
// This property to display in telerik ClientTemplate
public string StatusName { get { return Enum.GetName(typeof (ProjectStatuses),Status ); } }
}
因为我喜欢扩展方法,我会添加这个: public static class ModelListExtensions
{
public static IQueryable<ProjectDetails> ToViewModelDetails(this IQueryable<Project> modelList)
{
return modelList.Select(m => new ProjectDetails
{
Id = m.Id,Name = m.Name,Status = m.Status,};
}
}
更新: 这是控制器 public ActionResult Index()
{
int total;
var viewModel = getGridList(out total);
ViewBag.Total = total;
return View(viewModel);
}
//this Action to get ajax pages
[GridAction(EnableCustomBinding = true)]
public ActionResult ReGetIndex(GridCommand command,int roleId)
{
int total;
var list = getGridList(out total,roleId,command);
return View(new GridModel {Data = list,Total = total});
}
private IEnumerable<ProjectDetails> getGridList(out int total,GridCommand command = null)
{
command = command ?? new GridCommand {Page = 1};
foreach (var descriptor in command.SortDescriptors)
{
if (descriptor.Member == "StatusValue")
descriptor.Member = "Status";
}
foreach (FilterDescriptor descriptor in command.FilterDescriptors)
{
if (descriptor.Member == "StatusValue")
descriptor.Member = "Status";
}
var list = modelService.AllAsQuery()
.ToViewModelDetails() // To convert it to our ViewModel if we have one
.Where(command.FilterDescriptors);
total = list.Count();
return (IEnumerable<ProjectDetails>) list.Sort(command.SortDescriptors)
.Page(command.Page - 1,command.PageSize)
.GroupBy(command.GroupDescriptors).ToIList();
}
这就是视图 @model IEnumerable<ProjectDetails>
@{
Html.Telerik()
.Grid(Model)
.Name("ProjectsGrid")
.Sortable()
.Filterable()
.EnableCustomBinding(true)
.DataBinding(dataBinding => dataBinding
.Ajax()
.Select("ReGetIndex","Projects"))
.Pageable(page => page.Style(GridPagerStyles.PageSizeDropDown | GridPagerStyles.NextPreviousAndNumeric).Total(ViewBag.Total))
.Columns(column =>
{
column.Bound(m => m.Id).Hidden(true);
column.Bound(m => m.Name);
column.Bound(m => m.StatusValue).ClientTemplate("<#= StatusName #>");
})
.Render();
}
更新: 如果要强制执行至少一个排序顺序,可以使用以下内容: if (!command.SortDescriptors.Any())
{
command.SortDescriptors.Add(new SortDescriptor {Member = "YourDefaultProperty"});
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-core – compilationOptions.emitEntryPoint是什么
- asp.net-mvc – MVC包含路径无效错误
- asp.net-mvc – 数据库中已经有一个名为“AspNetRoles”的对
- vbscript – 从ASP脚本使用wscript.shell时无法引用UNC路径
- asp.net-mvc – HiddenFor(x => x.Id)正在由UrlParameter而
- asp.net-mvc – 无法解析绑定敲除错误
- 在ASP.NET MVC Core项目中使用View内部的C#7功能
- ASP.NET错误:页面Y.ascx无法使用用户控件X.ascx
- asp.net-core-2.1 – 配置HttpClientFactory以使用当前请求
- asp.net-mvc-3 – 在文件结构中组织部分视图的最佳方法是什
推荐文章
站长推荐
- asp.net-mvc – 为生成的帮助标签添加冒号和星号
- asp.net-mvc – @ Html.DisplayNameFor的详细信息
- 在Entity Framework中使用存储过程(一):实现存
- 有标签的ASP.NET WebControl吗?
- asp.net – 点击按钮禁用
- asp.net – Windows 2012 SERVER – 为ADO.NET提
- asp.net – 使用Booksleeve维护开放的Redis PubS
- asp.net – 即使它已经过时,仍然可以使用System.
- 将自定义属性添加到asp.net中的页面指令
- asp.net-mvc – 带有ASP.NET标识的MVC 5 – 用户
热点阅读
