/// <summary> /// 查询数据 /// </summary> public override void OnQuery( AjaxTableSearchRequest request, ref IQueryable <GenericTag> query) { // 在第一页显示所有分类 request.PageNo = 0; request.PageSize = 0x7ffffffe; // 提供类型给其他回调 var app = new TController(); request.Conditions["Type"] = app.Type; // 按类型 query = query.Where(q => q.Type == app.Type); // 按关键词 if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Name.Contains(request.Keyword) || q.Remark.Contains(request.Keyword)); } }
/// <summary> /// 添加列 /// </summary> public override void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response) { response.Columns.AddIdColumn("Id").StandardSetupFor <PaymentTransactionCrudController>(request); response.Columns.AddNoColumn(); response.Columns.AddMemberColumn("Serial"); response.Columns.AddMemberColumn("ExternalSerial"); response.Columns.AddMemberColumn("Type"); response.Columns.AddEditColumnFor <PaymentApiCrudController>("ApiName", "ApiId"); response.Columns.AddMemberColumn("Amount"); response.Columns.AddMemberColumn("PaymentFee"); response.Columns.AddEditColumnFor <UserCrudController>("Payer", "PayerId"); response.Columns.AddEditColumnFor <UserCrudController>("Payee", "PayeeId"); response.Columns.AddMemberColumn("CreateTime"); response.Columns.AddMemberColumn("UpdateTime"); response.Columns.AddEnumLabelColumn("State", typeof(PaymentTransactionState)); response.Columns.AddActionColumn().StandardSetupFor <PaymentTransactionCrudController>(request); }
/// <summary> /// 选择数据 /// </summary> public override void OnSelect( AjaxTableSearchRequest request, IList <EntityToTableRow <User> > pairs) { var userManager = Application.Ioc.Resolve <UserManager>(); foreach (var pair in pairs) { var userType = pair.Entity.GetUserType(); pair.Row["Id"] = pair.Entity.Id; pair.Row["Avatar"] = userManager.GetAvatarWebPath(pair.Entity.Id); pair.Row["Username"] = pair.Entity.Username; pair.Row["Roles"] = string.Join(", ", pair.Entity.Roles.Select(r => r.Name)); pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString(); pair.Row["SuperAdmin"] = ( userType is IAmSuperAdmin ? EnumBool.True : EnumBool.False); pair.Row["Deleted"] = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None; } }
/// <summary> /// 从数据库中的数据构建搜索回应 /// 支持自动分页和配合表格回调设置结果 /// </summary> /// <typeparam name="TData">数据类型</typeparam> /// <param name="request">搜索请求</param> /// <param name="callbacks">表格回调</param> /// <returns></returns> public static AjaxTableSearchResponse BuildResponseFromDatabase <TData>( this AjaxTableSearchRequest request, IEnumerable <IAjaxTableCallback <TData> > callbacks) where TData : class, IEntity { var response = new AjaxTableSearchResponse(); UnitOfWork.Read(context => { // 从数据库获取数据,过滤并排序 var query = context.Query <TData>(); foreach (var callback in callbacks) { callback.OnQuery(request, context, ref query); } foreach (var callback in callbacks) { callback.OnSort(request, context, ref query); } // 分页并设置分页信息 // 当前页没有任何内容时返回最后一页的数据 var queryResult = response.Pagination.Paging(request, query); response.PageNo = request.PageNo; response.PageSize = request.PageSize; // 选择数据 // 默认把对象转换到的字符串保存到ToString中 var pairs = queryResult .Select(r => new EntityToTableRow <TData>(r)) .ToList(); foreach (var pair in pairs) { pair.Row["ToString"] = pair.Entity.ToString(); } foreach (var callback in callbacks) { callback.OnSelect(request, pairs); } response.Rows = pairs.Select(p => p.Row).ToList(); // 调用返回搜索回应前的回调,这里会添加需要的列 foreach (var callback in callbacks) { callback.OnResponse(request, response); } }); return(response); }
/// <summary> /// 查询数据 /// </summary> public void OnQuery( AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <ProductProperty> query) { // 按回收站 query = query.FilterByRecycleBin(request); // 按关键字 if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Name.Contains(request.Keyword) || q.Remark.Contains(request.Keyword)); } // 按是否销售属性 if (request.Conditions.ContainsKey("IsSalesProperty")) { var isSalesProperty = request.Conditions.GetOrDefault <string>("IsSalesProperty") == "on"; query = query.Where(q => q.IsSalesProperty == isSalesProperty); } }
public virtual IActionResult SearchAction() { // 获取搜索请求 var json = Request.Get <string>("json"); var request = AjaxTableSearchRequest.FromJson(json); // 搜索图片列表 // 分页时如果没有结果,使用最后一页的结果 var imageManager = Application.Ioc.Resolve <ImageManager>(); var queryResult = imageManager.Query(CategoryLower); if (!string.IsNullOrEmpty(request.Keyword)) { queryResult = queryResult.Where(q => q.FilenameWithoutExtension.Contains(request.Keyword)).ToList(); } var response = new AjaxTableSearchResponse(); var result = response.Pagination.Paging(request, queryResult.AsQueryable()); // 返回搜索结果 response.PageNo = request.PageNo; response.PageSize = request.PageSize; response.Rows.AddRange(result.Select(q => { var path = imageManager.GetImageWebPath( CategoryLower, q.FilenameWithoutExtension, q.Extension); var thumbnailPath = imageManager.GetImageWebPath( CategoryLower, q.FilenameWithoutExtension, imageManager.ImageThumbnailSuffix + q.Extension); var storageFile = imageManager.GetImageStorageFile( CategoryLower, q.FilenameWithoutExtension, q.Extension); var lastWriteTime = storageFile.LastWriteTimeUtc.ToClientTimeString(); var fileSize = FileUtils.GetSizeDisplayName(storageFile.Length); return(new Dictionary <string, object>() { { "name", q.FilenameWithoutExtension }, { "extension", q.Extension }, { "path", path }, { "thumbnailPath", thumbnailPath }, { "lastWriteTime", lastWriteTime }, { "fileSize", fileSize } }); })); return(new JsonResult(response)); }
/// <summary> /// 选择字段 /// </summary> public override void OnSelect( AjaxTableSearchRequest request, IList <EntityToTableRow <Domain.Entities.ProductRating> > pairs) { var ratingManager = Application.Ioc.Resolve <ProductRatingManager>(); foreach (var pair in pairs) { var rankDescription = new T(pair.Entity.Rank.GetDescription()); pair.Row["Id"] = pair.Entity.Id; pair.Row["Username"] = ratingManager.StripUsername(pair.Entity.Owner.Username); pair.Row["Rank"] = (int)pair.Entity.Rank; pair.Row["RankDescription"] = rankDescription; pair.Row["Comment"] = string.IsNullOrEmpty(pair.Entity.Comment) ? rankDescription : pair.Entity.Comment; pair.Row["MatchParametersDescription"] = pair.Entity.Product.GetMatchParametersDescription( pair.Entity.OrderProduct.MatchParameters); pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString(); } }
/// <summary> /// 查询数据 /// </summary> public void OnQuery( AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <Database.Product> query) { // 按回收站 query = query.FilterByRecycleBin(request); // 按关键字 if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Name.Contains(request.Keyword) || q.Remark.Contains(request.Keyword)); } // 按类型 var productType = request.Conditions.GetOrDefault <string>("ProductType"); if (!string.IsNullOrEmpty(productType)) { query = query.Where(q => q.Type == productType); } // 按状态 var productState = request.Conditions.GetOrDefault <string>("ProductState"); if (!string.IsNullOrEmpty(productState)) { query = query.Where(q => q.State == productState); } // 按分类 var productClass = request.Conditions.GetOrDefault <long>("ProductClass"); if (productClass > 0) { query = query.Where(q => q.Classes.Any(c => c.Id == productClass)); } // 按标签 var productTag = request.Conditions.GetOrDefault <long>("ProductTag"); if (productTag > 0) { query = query.Where(q => q.Tags.Any(t => t.Id == productTag)); } }
/// <summary> /// 选择数据 /// </summary> public override void OnSelect( AjaxTableSearchRequest request, IList <EntityToTableRow <BuyerOrder> > pairs) { foreach (var pair in pairs) { var displayInfo = pair.Entity.ToDisplayInfo(); pair.Row["Id"] = pair.Entity.Id; pair.Row["Serial"] = pair.Entity.SellerOrder.Serial; pair.Row["HeadingHtml"] = displayInfo.GetTableHeadingHtml().ToString(); pair.Row["OrderProducts"] = displayInfo.OrderProducts.GetSummryListHtml().ToString(); pair.Row["Price"] = displayInfo.OrderProducts.GetPriceListHtml().ToString(); pair.Row["Quantity"] = displayInfo.OrderProducts.GetOrderCountListHtml().ToString(); pair.Row["ShippedQuantity"] = displayInfo.OrderProducts.GetShippedCountListHtml().ToString(); pair.Row["TotalCost"] = displayInfo.GetTotalCostWithPartsHtml().ToString(); pair.Row["State"] = pair.Entity.SellerOrder.State; pair.Row["Seller"] = displayInfo.Seller; pair.Row["SellerId"] = displayInfo.SellerId; pair.Row["Deleted"] = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None; pair.Row["OrderActions"] = displayInfo.GetOrderActionsTableCellHtml().ToString(); } }
/// <summary> /// 添加列和操作 /// </summary> public void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response) { response.Columns.AddIdColumn("Id").StandardSetupForCrudPage <ProductManageApp>(request); response.Columns.AddNoColumn(); response.Columns.AddHtmlColumn("Name", "30%"); response.Columns.AddMemberColumn("Price"); response.Columns.AddMemberColumn("Stock"); response.Columns.AddMemberColumn("CreateTime"); response.Columns.AddMemberColumn("LastUpdated"); response.Columns.AddMemberColumn("Type"); response.Columns.AddMemberColumn("State"); response.Columns.AddEditColumnForCrudPage <UserManageApp>("Seller", "SellerId"); response.Columns.AddMemberColumn("DisplayOrder"); response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted)); var actionColumn = response.Columns.AddActionColumn("150"); actionColumn.AddButtonForOpenLink(new T("Preview"), "btn btn-xs btn-success", "fa fa-eye", "/product/view?id=<%-row.Id%>", "_blank"); actionColumn.StandardSetupForCrudPage <ProductManageApp>(request); }
/// <summary> /// 添加列和操作 /// </summary> public override void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response) { response.Columns.AddIdColumn("Id").StandardSetupFor <OrderCrudController>(request); response.Columns.AddHtmlColumn("OrderProducts", "30%"); response.Columns.AddHtmlColumn("Price", "70"); response.Columns.AddHtmlColumn("Quantity", "70"); response.Columns.AddHtmlColumn("ShippedQuantity", "70"); response.Columns.AddHtmlColumn("TotalCost", "70"); response.Columns.AddEnumLabelColumn("State", typeof(OrderState), "50"); response.Columns.AddEditColumnFor <UserCrudController>("Buyer", "BuyerId", width: "70"); response.Columns.AddEditColumnFor <UserCrudController>("Seller", "SellerId", width: "70"); var actionColumn = response.Columns.AddActionColumn("5%"); var deleted = request.Conditions.GetOrDefault <bool>("Deleted"); if (!deleted) { actionColumn.AddEditActionFor <OrderCrudController>(); } actionColumn.AddHtmlAction("OrderActions"); }
/// <summary> /// 搜索请求的处理函数 /// </summary> /// <returns></returns> protected override IActionResult SearchAction() { // 检查权限 var privilegeManager = Application.Ioc.Resolve <PrivilegeManager>(); privilegeManager.Check(AllowedUserTypes, RequiredPrivileges); // 获取参数并转换到搜索请求 var json = HttpManager.CurrentContext.Request.Get <string>("json"); var request = AjaxTableSearchRequest.FromJson(json); // 构建搜索回应 var query = Translates.Select(t => new Translation() { Original = t.Key, Translated = t.Value }); if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Original.Contains(request.Keyword) || q.Translated.Contains(request.Keyword)); } var response = new AjaxTableSearchResponse(); var result = response.Pagination.Paging(request, query.AsQueryable()); response.PageNo = request.PageNo; response.PageSize = request.PageSize; response.Rows.AddRange(result.Select(translation => new Dictionary <string, object>() { { "Id", HttpUtils.UrlEncode(translation.Original) }, { "OriginalText", translation.Original }, { "TranslatedText", translation.Translated }, { "ToString", translation.ToString() } })); response.Columns.AddNoColumn(); response.Columns.AddMemberColumn("OriginalText"); response.Columns.AddMemberColumn("TranslatedText"); var actionColumn = response.Columns.AddActionColumn("130"); actionColumn.AddEditAction("Translation", EditUrl, dialogParameters: new { size = "size-wide" }); actionColumn.AddDeleteAction("Translation", DeleteUrl); return(new JsonResult(response)); }
/// <summary> /// 查询数据 /// </summary> public override void OnQuery( AjaxTableSearchRequest request, ref IQueryable <Product> query) { // 按关键字 if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Name.Contains(request.Keyword) || q.Remark.Contains(request.Keyword)); } // 按类型 var productType = request.Conditions.GetOrDefault <string>("ProductType"); if (!string.IsNullOrEmpty(productType)) { query = query.Where(q => q.Type == productType); } // 按状态 var productState = request.Conditions.GetOrDefault <string>("ProductState"); if (!string.IsNullOrEmpty(productState)) { query = query.Where(q => q.State == productState); } // 按分类 var productClass = request.Conditions.GetOrDefault <Guid?>("ProductClass"); if (productClass != null) { query = query.Where(q => q.Classes.Any(c => c.Id == productClass)); } // 按标签 var productTag = request.Conditions.GetOrDefault <Guid?>("ProductTag"); if (productTag != null) { query = query.Where(q => q.Tags.Any(t => t.Id == productTag)); } }
/// <summary> /// 选择数据 /// </summary> public override void OnSelect( AjaxTableSearchRequest request, IList <EntityToTableRow <Product> > pairs) { foreach (var pair in pairs) { var matchedDatas = pair.Entity.MatchedDatas.ToList(); var seller = pair.Entity.Seller; pair.Row["Id"] = pair.Entity.Id; pair.Row["Name"] = pair.Entity.GetSummaryHtml().ToString(); pair.Row["NameText"] = pair.Entity.Name; pair.Row["Price"] = matchedDatas.GetPriceString(); pair.Row["Stock"] = matchedDatas.GetTotalStockString(); pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString(); pair.Row["UpdateTime"] = pair.Entity.UpdateTime.ToClientTimeString(); pair.Row["Type"] = new T(pair.Entity.Type); pair.Row["State"] = new T(pair.Entity.State); pair.Row["Seller"] = seller?.Username; pair.Row["SellerId"] = seller?.Id; pair.Row["DisplayOrder"] = pair.Entity.DisplayOrder; pair.Row["Deleted"] = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None; } }
/// <summary> /// 过滤数据 /// </summary> public override void OnQuery( AjaxTableSearchRequest request, ref IQueryable <SellerOrder> query) { // 按状态 var state = request.Conditions.GetOrDefault <OrderState?>("State"); if (state != null) { query = query.Where(o => o.State == state); } // 按关键字 if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Serial.Contains(request.Keyword) || q.Remark.Contains(request.Keyword)); } // 按买家 var buyer = request.Conditions.GetOrDefault <string>("Buyer"); if (!string.IsNullOrEmpty(buyer)) { query = query.Where(q => q.Buyer.Username == buyer); } // 按卖家 var seller = request.Conditions.GetOrDefault <string>("Seller"); if (!string.IsNullOrEmpty(seller)) { query = query.Where(q => q.Owner.Username == seller); } // 按备注旗帜 var flags = request.Conditions.GetOrDefault <OrderRemarkFlags?>("RemarkFlags"); if (flags != null) { query = query.Where(q => q.RemarkFlags == flags); } }
/// <summary> /// 添加列和操作 /// </summary> public override void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response) { response.Columns.AddIdColumn("Id").StandardSetupFor <PaymentApiCrudController>(request); response.Columns.AddNoColumn(); response.Columns.AddMemberColumn("Name", "35%"); response.Columns.AddMemberColumn("Type"); response.Columns.AddEditColumnFor <PaymentApiCrudController>("Owner", "OwnerId"); response.Columns.AddMemberColumn("CreateTime"); response.Columns.AddMemberColumn("UpdateTime"); response.Columns.AddMemberColumn("DisplayOrder"); response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted)); var actionColumn = response.Columns.AddActionColumn("155"); var deleted = request.Conditions.GetOrDefault <bool>("Deleted"); if (!deleted) { actionColumn.AddButtonForOpenLink( new T("TestPayment"), "btn btn-xs btn-warning", "fa fa-edit", "/admin/payment_apis/test_payment?id=<%-row.Id%>"); } actionColumn.StandardSetupFor <PaymentApiCrudController>(request); }
/// <summary> /// 添加列和操作 /// </summary> public override void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response) { response.Columns.AddIdColumn("Id").StandardSetupFor <TController>(request); response.Columns.AddTreeNodeColumn("Name", "Level", "NoChilds"); response.Columns.AddMemberColumn("CreateTime"); response.Columns.AddMemberColumn("DisplayOrder"); response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted)); var actionColumn = response.Columns.AddActionColumn(); var deleted = request.Conditions.GetOrDefault <bool>("Deleted"); var dialogParameters = new { size = "size-wide" }; if (!deleted) { actionColumn.AddEditActionFor <TController>(dialogParameters: dialogParameters); actionColumn.AddDeleteActionFor <TController>(); } else { actionColumn.AddRecoverActionFor <TController>(); actionColumn.AddDeleteForeverActionFor <TController>(); } }
/// <summary> /// 选择数据 /// </summary> public void OnSelect( AjaxTableSearchRequest request, List <EntityToTableRow <Database.GenericClass> > pairs) { // 按上下级关系重新生成数据列表 var classMapping = pairs.ToDictionary(p => p.Entity.Id); var tree = TreeUtils.CreateTree(pairs, p => p, p => classMapping.GetOrDefault(p.Entity.Parent == null ? 0 : p.Entity.Parent.Id)); pairs.Clear(); foreach (var node in tree.EnumerateAllNodes().Skip(1)) { var pair = node.Value; pair.Row["Id"] = pair.Entity.Id; pair.Row["Name"] = pair.Entity.Name; pair.Row["ParentId"] = pair.Entity.Parent == null ? 0 : pair.Entity.Parent.Id; pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString(); pair.Row["DisplayOrder"] = pair.Entity.DisplayOrder; pair.Row["Deleted"] = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None; pair.Row["Level"] = node.GetParents().Count() - 1; pair.Row["NoChilds"] = !node.Childs.Any(); pairs.Add(pair); } }
/// <summary> /// 搜索请求的处理函数 /// </summary> /// <returns></returns> protected override IActionResult SearchAction() { var json = Request.Get <string>("json"); var request = AjaxTableSearchRequest.FromJson(json); var query = Translates.Select(t => new CustomTranslation() { Id = t.Key, Translated = t.Value }); if (!string.IsNullOrEmpty(request.Keyword)) { query = query.Where(q => q.Id.Contains(request.Keyword) || q.Translated.Contains(request.Keyword)); } var response = new AjaxTableSearchResponse(); var result = response.Pagination.Paging(request, query.AsQueryable()); response.PageNo = request.PageNo; response.PageSize = request.PageSize; response.Rows.AddRange(result.Select(translation => new Dictionary <string, object>() { { "Id", HttpUtils.UrlEncode(translation.Id) }, { "OriginalText", translation.Id }, { "TranslatedText", translation.Translated }, { "ToString", translation.ToString() } })); response.Columns.AddNoColumn(); response.Columns.AddMemberColumn("OriginalText"); response.Columns.AddMemberColumn("TranslatedText"); var actionColumn = response.Columns.AddActionColumn("130"); actionColumn.AddEditAction("Translation", EditUrl, dialogParameters: new { size = "size-wide" }); actionColumn.AddDeleteAction("Translation", DeleteUrl); return(new JsonResult(response)); }
/// <summary> /// 排序数据 /// </summary> public void OnSort( AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <UserShippingAddress> query) { query = query.OrderByDescending(q => q.Id); }
/// <summary> /// 排序数据 /// </summary> public override void OnSort( AjaxTableSearchRequest request, ref IQueryable <Product> query) { query = query.OrderByDescending(q => q.Id); }
/// <summary> /// 添加列和批量处理 /// </summary> public abstract void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response);
/// <summary> /// 选择需要的字段 /// </summary> public abstract void OnSelect( AjaxTableSearchRequest request, IList <EntityToTableRow <TEntity> > pairs);
/// <summary> /// 过滤数据 /// 默认不过滤数据 /// </summary> public virtual void OnQuery( AjaxTableSearchRequest request, ref IQueryable <TEntity> query) { }
/// <summary> /// 添加删除相关的按钮 /// 如果数据类型可以回收,则添加批量删除或批量恢复和永久删除 /// 如果数据类型不可以回收,则添加批量永久删除 /// </summary> /// <param name="column">Id列</param> /// <param name="request">搜索请求</param> /// <param name="dataType">数据类型</param> /// <param name="typeName">类型名称</param> /// <param name="batchUrl">批量操作使用的Url</param> public static void AddDeleteActions( this AjaxTableIdColumn column, AjaxTableSearchRequest request, Type dataType, string typeName, string batchUrl) { // 判断需要添加哪些操作 bool addBatchDelete = false; bool addBatchRecover = false; bool addBatchDeleteForever = false; if (RecyclableTrait.For(dataType).IsRecyclable) { var deleted = request.Conditions.GetOrDefault <bool>("Deleted"); addBatchDelete = !deleted; addBatchRecover = deleted; addBatchDeleteForever = deleted; } else { addBatchDeleteForever = true; } // 添加批量删除 typeName = new T(typeName); var entityTrait = EntityTrait.For(dataType); if (addBatchDelete) { column.AddConfirmActionForMultiChecked( new T("Batch Delete"), "fa fa-recycle", string.Format(new T("Please select {0} to delete"), typeName), new T("Batch Delete"), ScriptStrings.ConfirmMessageTemplateForMultiSelected( string.Format(new T("Sure to delete following {0}?"), typeName), "ToString"), ScriptStrings.PostConfirmedActionForMultiSelected( entityTrait.PrimaryKey, batchUrl + "?action=delete"), new { type = "type-danger" }); } // 添加批量恢复 if (addBatchRecover) { column.AddConfirmActionForMultiChecked( new T("Batch Recover"), "fa fa-history", string.Format(new T("Please select {0} to recover"), typeName), new T("Batch Recover"), ScriptStrings.ConfirmMessageTemplateForMultiSelected( string.Format(new T("Sure to recover following {0}?"), typeName), "ToString"), ScriptStrings.PostConfirmedActionForMultiSelected( entityTrait.PrimaryKey, batchUrl + "?action=recover")); } // 添加批量永久删除 if (addBatchDeleteForever) { column.AddConfirmActionForMultiChecked( new T("Batch Delete Forever"), "fa fa-remove", string.Format(new T("Please select {0} to delete"), typeName), new T("Batch Delete Forever"), ScriptStrings.ConfirmMessageTemplateForMultiSelected( string.Format(new T("Sure to delete following {0} forever?"), typeName), "ToString"), ScriptStrings.PostConfirmedActionForMultiSelected( entityTrait.PrimaryKey, batchUrl + "?action=delete_forever"), new { type = "type-danger" }); } }
/// <summary> /// 排序数据 /// </summary> public void OnSort( AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <Database.Article> query) { query = query.OrderByDescending(a => a.Id); }
public void OnSort(AjaxTableSearchRequest request, ref IQueryable <User> query) { }
public Func <TResult> WrapQueryMethod <TResult>( AjaxTableSearchRequest request, Func <TResult> queryMethod) { return(queryMethod); }
/// <summary> /// 排序数据 /// </summary> public void OnSort( AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <User> query) { query = query.OrderByDescending(u => u.Id); }
/// <summary> /// 排序数据 /// </summary> public override void OnSort( AjaxTableSearchRequest request, ref IQueryable <Article> query) { query = query.OrderByDescending(a => a.Id); }