在我的项目中,我使用kendo网格来显示数据,在我的ActionResult中,我使用此代码来获取数据:
public ActionResult ShowData([DataSourceRequest] DataSourceRequest request, long studentid)
{
IQueryable<Models.Registration.RegistrationModel>
query =
from financeItem in db.RegistrationItems
select new Models.Registration.RegistrationModel
{
RegisterId = financeItem.RegistrationId,
Id = financeItem.Registration.Id,
Date = financeItem.Registration.Date,
StudentName = financeItem.Registration.Student.FirstName + " " + financeItem.Registration.Student.LastName
};
DataSourceResult dsr = query.ToDataSourceResult(request);
return Json(dsr, JsonRequestBehavior.AllowGet);
}
所以。我需要转换日期到本地日期,我有一个问题。 这是我的问题: 当我想在查询中转换日期时我得到很多错误,linq2sql无法找到转换器功能。所以我将查询类型从IQueryable更改为list并尝试转换。但我有时间错误,因为我有很多记录。 在此错误之后,我尝试在viewmodel中的get和set属性中转换数据,如下代码:
public string DateSs
{
get
{
return DateConvertor(Date.ToString());
}
set { value.ToString(); }
}
我在视图中使用此属性并显示转换后的数据。 到目前为止一切正常但是当我想在kendo网格中使用过滤器部分并根据输入日期过滤数据时,我得到并且错误表明此文件未在查询中退出。 所以我有头痛,我不知道我该怎么做以及如何转换这个贵妇人日期
答案 0 :(得分:1)
对于剑道网格,您的日期列代表 DateSs 而非日期。当它尝试在Date上应用过滤器时,它会在DateSs上应用过滤器,该过滤器不存在于数据库表中,如果在查询中定义则会抛出错误。
我认为解决方法是在应用 ToDataSourceResult 之前拦截 DataSourceRequest 并相应地更改值和过滤器名称
<强>更新强>
过滤器Kendo Grid发送的是请求。过滤器但结构是分层的,以便在一个请求中支持多个过滤器。所以,首先你可能想要将过滤器展平,你可以使用这个代码,
public static IEnumerable<IFilterDescriptor> FlattenFilters(this DataSourceRequest request)
{
return request.Filters
.RecursiveSelect(
descriptor => (descriptor as CompositeFilterDescriptor)?.FilterDescriptors ?? Enumerable.Empty<IFilterDescriptor>(),
descriptor => descriptor as FilterDescriptor)
.Where(x => x != null);
}
此函数将返回当前应用的所有过滤器的Enumerable。然后你可以像这样更改过滤器的名称
request.FlattenFilters().Each(x =>
{
FilterDescriptor filter = x as FilterDescriptor;
if (filter != null && filter.Member == "DateSs")
{
filter.Member = "Date";
//Change the filter.Value property according to your case
//i.e. It would be in String and you might want to convert it to date too.
}
});