Asp.net mvc 2 使用ASP.NET MVC 2时保留筛选选项的更好方法指南
我有一个ASP.NETMVC2应用程序,它部分允许用户过滤数据并在JQGrid中查看这些数据 目前,它由一个控制器组成,该控制器初始化我的过滤器模型,并配置我希望网格显示的方式。视图和局部视图使用此信息来显示过滤器和栅格外壳。我使用编辑器模板来显示我的过滤器。JQGrid使用JsonResult控制器操作(GET)检索过滤器的结果(通过添加网格提供的分页,GET请求只返回一页数据。网格用于请求数据的Uri包含作为RouteValue的筛选器模型,并且当前包含筛选器当前状态的字符串表示形式。使用自定义IModelBinder将此表示形式转换回到筛选器模型类的实例中 用户可以更改过滤器并按下“提交”按钮以获得不同的结果,然后(HttpPost)ViewResult操作将获取过滤器模型,该过滤器模型由另一个模型绑定器重新构建,并导致网格外壳更新 因此,我: 过滤器模型 表示用户所需的过滤特性 FilterModelEditorTemplateSubmissionBinder:DefaultModelBinder-用于将更改过滤特征的用户提供的请求信息转换为适当的FilterModel实例 FilterModelStringRepresentationBinder:IModelBinder-用于转换JQGrid GET数据请求中的编码过滤器,以便对最终执行查询并返回相关数据的服务发出正确的请求 ViewResult Index()-构造默认过滤器,配置网格规范,并返回视图以呈现过滤器的编辑器模板和网格外壳 [HttpPost]ViewResult筛选器(FilterModel筛选器)-采用新的筛选器特征并返回与Index()相同的视图。使用FilterModelEditorTemplateSubmissionBinder绑定筛选器模型 JsonResult GetData(FilterModel filter,string sidx,string sord,int page,int rows)-从JQGrid调用以检索数据。使用FilterModelStringRepresentationBinder绑定筛选器模型 更复杂的是,我的筛选器模型包含一个选项,用于从项集合中选择单个值。此集合是从服务请求中检索的,我不希望每次显示筛选器时都继续查询此数据,当前,如果属性为null,我会得到它,然后包括隐藏在编辑器模板和enc中的选项在字符串表示中进行oding。然后,这些选项由相关的模型绑定器重新组合Asp.net mvc 2 使用ASP.NET MVC 2时保留筛选选项的更好方法指南,asp.net-mvc-2,jqgrid,Asp.net Mvc 2,Jqgrid,我有一个ASP.NETMVC2应用程序,它部分允许用户过滤数据并在JQGrid中查看这些数据 目前,它由一个控制器组成,该控制器初始化我的过滤器模型,并配置我希望网格显示的方式。视图和局部视图使用此信息来显示过滤器和栅格外壳。我使用编辑器模板来显示我的过滤器。JQGrid使用JsonResult控制器操作(GET)检索过滤器的结果(通过添加网格提供的分页,GET请求只返回一页数据。网格用于请求数据的Uri包含作为RouteValue的筛选器模型,并且当前包含筛选器当前状态的字符串表示形式。使用自
虽然这种方法可行,但我还是忍不住觉得我必须重新设计viewstate,以维护我的过滤器和包含的选项。由于我是ASP.NET MVC新手,但我对经典的ASP和ASP.NET Web表单非常满意,我想我应该把它扔到那里作为评论和指导,以找到一种更适合我的方式h MVC模式。我做过一次,非常简单 伪代码: 控制器 视图模型
公共类ListViewModel{
//ObjectAmountPerPage是每页所需的对象数量,您可以将其修改为//参数,以便用户
//你可以选择数量
public int ObjectAmountPerPage=20//您可以将其转换为任何类型的变量db/configfile/parameter
公共列表对象列表;
公共网页;
公共ListViewModel(id){
Currentpage=id;
使用(MyDataContext db=new MyDataContext()){
ObjectList=db.YourObjectName.OrderBy(object=>object.somefield).getListFromStartIndexToEndIndex(id*ObjectAmountPerPage,(id*ObjectAmountPerPage)+20.toList();
}
}
}
现在创建渲染部分:
局部视图
使用字段创建一个表
并创建一个实现Jquery、其他组件和partialView的视图
看法
$(函数(){
$(“#下一页”)。单击(函数(){
(/controller/getlist/$(“#nextpage”).val(),函数(data){$(“#yourlist”).html=data});
});
});
下一页
我希望这有帮助,这是根据MVC-mv-mv-c原则;)
模型视图-(模型视图)-控件我做过一次,非常简单 伪代码: 控制器 视图模型
公共类ListViewModel{
//ObjectAmountPerPage是每页所需的对象数量,您可以将其修改为//参数,以便用户
//你可以选择数量
public int ObjectAmountPerPage=20//您可以将其转换为任何类型的变量db/configfile/parameter
公共列表对象列表;
公共网页;
公共ListViewModel(id){
Currentpage=id;
使用(MyDataContext db=new MyDataContext()){
ObjectList=db.YourObjectName.OrderBy(object=>object.somefield).getListFromStartIndexToEndIndex(id*ObjectAmountPerPage,(id*ObjectAmountPerPage)+20.toList();
}
}
}
现在创建渲染部分:
局部视图
使用字段创建一个表
并创建一个实现Jquery、其他组件和partialView的视图
看法
$(函数(){
$(“#下一页”)。单击(函数(){
(/controller/getlist/$(“#nextpage”).val(),函数(data){$(“#yourlist”).html=data});
});
});
下一页
我希望这有帮助,这是根据MVC-mv-mv-c原则;)
模型视图-(模型视图)-控件在我看来,将为jqGrid提供纯数据的某些操作与其他控制器操作分开的最佳方法是。这种面向jqGrid的操作可以有如下原型:
JsonResult GetData(string filter, string sidx, string sord, int page, int rows)
我个人更喜欢将此部分作为WC来实现
public class ListViewModel{
//ObjectAmountPerPage is the amount of object you want per page, you can modify this as //parameter so the user
//can choose the amount
public int ObjectAmountPerPage = 20 //you can make this into a variable of any sort, db/configfile/parameter
public List<YourObjectName> ObjectList;
public int CurrentPage;
public ListViewModel(id){
Currentpage = id;
using (MyDataContext db = new MyDataContext()){
ObjectList = db.YourObjectName.OrderBy(object=>object.somefield).getListFromStartIndexToEndIndex(id*ObjectAmountPerPage ,(id*ObjectAmountPerPage) +20).toList();
}
}
}
<@page inherit="IEnumerable<ListViewMode>">
<%foreach(YourObjectName object in Model.ObjectList){%>
Create a table with your fields
<%}%>
<javascript>
$(function(){
$("#nextpage").click(function(){
(/controller/getlist/$("#nextpage").val(),function(data){$("#yourlist").html = data});
});
});
</javascript>
<div id="yourlist">
<%=Html.RenderPartial("YourPartialView", new ListViewModel())%>
</div>
<something id="nextpage" value"<%=Model.CurentPage+1%>">next page</something>
JsonResult GetData(string filter, string sidx, string sord, int page, int rows)