Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 2 使用ASP.NET MVC 2时保留筛选选项的更好方法指南_Asp.net Mvc 2_Jqgrid - Fatal编程技术网

Asp.net mvc 2 使用ASP.NET MVC 2时保留筛选选项的更好方法指南

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的筛选器模型,并且当前包含筛选器当前状态的字符串表示形式。使用自

我有一个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。然后,这些选项由相关的模型绑定器重新组合


虽然这种方法可行,但我还是忍不住觉得我必须重新设计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)