asp.net-mvc-2 – 使用ASP.NET MVC 2时更好地保留过滤选项的指南
|
我有一个ASP.NET MVC 2应用程序,它部分允许用户过滤数据并在JQGrid中查看该数据. 目前,它由一个控制器组成,该控制器初始化我的过滤器模型并配置我希望如何显示网格.视图和局部视图使用此信息来显示过滤器和网格外壳.我使用编辑器模板来显示我的过滤器. JQGrid使用JsonResult控制器操作(GET)来检索过滤器的结果(添加网格提供的分页 – GET请求只返回一页数据.网格使用的Uri请求数据包含过滤器模型作为RouteValue – 并且当前包含过滤器当前状态的字符串表示.自定义IModelBinder用于将此表示转换回过滤器模型类的实例. 用户可以更改过滤器并按下提交按钮以获得不同的结果 – 然后由(HttpPost)ViewResult操作拾取,该操作采用过滤器模型 – 由另一个模型绑定器重构并导致网格外壳更新. 所以我有: FilterModel FilterModelEditorTemplateSubmissionBinder:DefaultModelBinder – 用于将用户提供的请求信息转换为适当的FilterModel实例,将其过滤特性更改为相应的FilterModel实例. FilterModelStringRepresentationBinder:IModelBinder – 用于从JQGrid GET数据请求转换编码过滤器,以便正确请求最终执行查询并返回相关数据的服务. ViewResult Index() – 构造一个默认过滤器,配置网格规范并返回视图以呈现过滤器的编辑器模板和网格外壳. [HttpPost] ViewResult Filter(FilterModel过滤器) – 获取新的过滤器特征并返回与Index()相同的视图.使用FilterModelEditorTemplateSubmissionBinder绑定过滤器模型. JsonResult GetData(FilterModel过滤器,字符串sidx,字符串sord,int页面,int行) – 从JQGrid调用以检索数据.使用FilterModelStringRepresentationBinder绑定过滤器模型. 作为一个复杂功能,我的过滤器模型包含一个从项目集合中选择单个值的选项.这个集合是从服务请求中检索的,我不想在每次显示过滤器时都继续查询这些数据,如果属性为null,我现在得到它,然后包含隐藏在编辑器模板中的选项和编码字符串表示.然后由相关的模型装订器重构这些选项. 虽然这种方法有效但我不禁觉得我必须重新发明viewstate才能维护我的过滤器和包含的选项.由于我是ASP.NET MVC的新手,但我对经典的ASP和ASP.NET Web Forms非常满意,我认为我会把它扔出去寻求评论和指导,以找到更接近MVC模式的方法. 解决方法在我看来,最好的方法是将一些为jqGrid提供纯数据的动作与其他控制器动作分开.这种面向jqGrid的动作可以有如下原型:JsonResult GetData(string filter,string sidx,string sord,int page,int rows) 我个人更喜欢将此部分实现为WCF服务,并将此WCF服务作为同一ASP.NET站点的一部分.一般而言,它更多的是品味问题,取决于您的其他项目要求. 这部分ASP.NET站点可以实现您需要的用户身份验证,并且可以使用单元测试进行测试,就像控制器的其他操作一样. ASP.NET MVC站点的视图可以包含jqGrids的空数据,并且只有正确的URL,并且可能生成HTML代码取决于站点中的用户权限.每个页面都会根据对服务器的对应请求(对相应的GetData操作的请求)填充jqGrids的数据. 您可以使用HTTP GET获取最佳数据缓存的数据.数据缓存是单独讨论的主题.如果执行此操作,则应在jqGrid的定义中使用prmNames:{nd:null}以删除唯一的nd参数,并将默认情况下添加的时间戳添加到每个GET请求.要完全控制服务器端的数据缓存,您可以例如添加服务器响应的HTTP头,“Cache-Control”设置为“max-age = 0”和“ETag”头,其值基于响应中返回的数据.您应该测试来自客户端的请求是否具有“If-None-Match”HTTP标头,其值为“ETag”,以对应客户端上缓存的数据.然后,您应该验证服务器(在数据库中)的当前数据是否已更改,如果没有更改,则生成具有空体的响应(将SuppressEntityBody设置为true)并返回“304 Not Modified”状态代码(HttpStatusCode) .NotModified)而不是默认的“200 OK”.更详细的解释要长得多. 如果您不希望优化站点以缓存jqGrids的HTTP GET数据,则可以使用HTTP POST或不使用prmNames:{nd:null}参数. JsonResult GetData(字符串过滤器,int行)中的代码并不是很缺乏原因.您应该从过滤器字符串反序列化JSON数据,然后构造对数据模型的请求取决于您使用的数据访问方法(LINQ to SQL,实体模型或带SqlDataReader的SqlCommand).因为你已经实现了这部分,所以讨论这部分是没有意义的. 可能我的建议的主要部分是使用控制器动作的明确分离,这些动作为所有jqGrids提供数据,并使用空数据使用MVC视图(仅具有< table id =“list”>< / table> ;< div id =“pager”>< / div>).您还应该毫不怀疑地使用相对较长的代码来分析来自jqGrid的高级搜索功能并生成或对数据模型的相应请求的过滤器.只需实施一次.在我的实现中代码也比较复杂,但它已经写了一次,它可以工作,它可以用于所有新的jqGrids. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 无法加载文件或程序集”或其依赖项之一.该进
- asp.net – 在css文件中的div.classname
- 使用StateServer的ASP.NET会话混合(SCARY!)
- asp.net – 导致GridView无效回发的TemplateField按钮
- 如何删除IIS自定义标头像X-Powered-By:ASP.NET从响应?
- asp.net-mvc – ASP.NET MVC中的CSS和Javascript相对路径混
- asp.net-mvc – 从ASP.NET在Office Web Apps中打开excel /
- asp.net – ASP MVC用户配置文件
- asp.net – 对齐和填充为asp:CheckBoxList
- 我们可以将asp.net mvc 4应用程序部署到带有Windows容器的d
- 如何在Asp.net中调用webmethod C#
- 如何在asp.net mvc中的html.actionlink中调用jav
- asp.net-mvc – 有没有人使用史蒂夫·桑德森的Mv
- asp.net-mvc – asp.net mvc博客引擎
- ASP.NET – UpdatePanel和JavaScript
- asp.net-mvc – AJAX在IIS 7.5中返回404(本地),但
- 如何使用ASP.NET Identity 3.0没有Entity Framew
- asp.net读取excel文件的三种方法示例
- asp.net – Autofac懒惰属性注入
- 什么是部署ASP.Net Web应用程序的好方法?
