ASP.NET动态数据TextSearch自定义过滤器模板
我正在尝试为所有基于文本的搜索实现自定义过滤器模板,并遇到构建查询的问题.我一直在按照
this blog上发布的说明进行操作,但不确定如何更改GetQueryable方法来执行
WHERE columnAttribute LIKE '%something%' 查询.在博客上的示例中,表达式是一个相等,如果我输入的文本与数据库列中的文本完全匹配,则该表达式有效. 目前我正在使用新的QueryExtender功能以及SearchExpression控件,但这需要为我需要文本搜索功能的所有表创建多个自定义页面.我想通过创建自定义过滤器模板来干掉它.任何帮助将不胜感激. 解决方法
在LINQ to SQL中,Strings.Contains方法是表达LIKE运算符的方式.以下是如何围绕LIKE运算符构建
filter template的示例.对于此示例,我们将为自定义过滤器模板指定名称“Text”.
第一步是更新Dynamic Data metadata.使用FilterUIHintAttribute注释您希望能够搜索的所有列,如下所示: [FilterUIHint("Text")] 现在我们需要创建“文本”过滤器模板.在过滤器模板文件夹中创建Text.ascx用户控件(通常为“?/ DynamicData / Filters”): <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Text.ascx.cs" Inherits="Text" %> <asp:TextBox runat="server" ID="TextBox1" autocomplete="off" OnTextChanged="TextBox1_Changed" /> 接下来创建后面的代码,Text.ascx.cs: public partial class Text : QueryableFilterUserControl { public override Control FilterControl { get { return TextBox1; } } protected void TextBox1_Changed(object sender,EventArgs e) { OnFilterChanged(); } public override IQueryable GetQueryable(IQueryable source) { var value = TextBox1.Text; if (String.IsNullOrWhiteSpace(value)) return source; if (DefaultValues != null) { DefaultValues[Column.Name] = value; } var parameter = Expression.Parameter(source.ElementType); var columnProperty = Expression.PropertyOrField(parameter,Column.Name); var likeValue = Expression.Constant(value,typeof (string)); var condition = Expression.Call( columnProperty,typeof (string).GetMethod("Contains"),likeValue); var where = Expression.Call( typeof (Queryable),"Where",new[] { source.ElementType },source.Expression,Expression.Lambda(condition,parameter)); return source.Provider.CreateQuery(where); } } 请注意,我们没有提供用户在更新文本过滤器后回发页面(因此更新结果)的方法.作为一种风格问题,我发现自动回发的TextBox控件令人困惑,我发现有一个单独的按钮来回发每个单独的过滤器是多余的.相反,我喜欢在页面模板中添加一个Button(例如,“?/ DynamicData / PageTemplates / List.aspx”),允许用户回发页面并更新结果.以下是相关摘录: <asp:Panel runat="server" DefaultButton="UpdateFilter"> <asp:QueryableFilterRepeater runat="server" ID="FilterRepeater"> <ItemTemplate> <asp:Label runat="server" Text='<%# Eval("DisplayName") %>' OnPreRender="Label_PreRender" /> <asp:DynamicFilter runat="server" ID="DynamicFilter" OnFilterChanged="DynamicFilter_FilterChanged" /><br /> </ItemTemplate> </asp:QueryableFilterRepeater> <asp:Button runat="server" ID="UpdateFilter" Text="Search" /> </asp:Panel> 这里的所有都是它的.用户现在应该能够搜索包含指定列中文本片段的记录. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在asp.net mvc中的redirecttoaction中设置查
- .net – 使用服务而不是组件有什么优缺点?
- asp.net-mvc – MVC @model的含义
- asp.net-mvc-3 – 是否有自动方式在MVC中查找未使用的视图?
- ASP.Net – 在负载平衡环境中处理会话数据?
- asp.net-mvc – EF上下文管理
- asp.net-mvc-2 – 将区域限制为给定角色
- asp.net – Elmah vs Elmah.MVC Nuget软件包 – 哪些使用和
- NHibernate中对同一个对象的Lazyload要设置一致
- asp.net-mvc – 所有ASP.NET Web API控制器返回404
- 在ASP.NET中使用Visual Studio发布功能有什么好处
- 从asp.net ListBox中获取所有选定的项目
- asp.net – 如何从内容页面访问母版页控件
- asp.net-mvc – ASP.Net MVC 3:反向授权属性
- asp.net-mvc – Accord.NET比较两个图像以确定相
- asp.net – 有没有= window.onload在Javascript?
- asp.net-mvc – 返回json中的双引号
- Asp.Net Mvc表单提交之List集合
- AntiForgery令牌使用ASP.NET5 Web API而不使用NE
- Asp.net WebApi HttpClient强类型PostAync