Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Jquery 在asp.net mvc视图中使用jqGrids等web网格的缺点_Jquery_Asp.net Mvc_Asp.net Mvc 4_Razor_Jqgrid - Fatal编程技术网

Jquery 在asp.net mvc视图中使用jqGrids等web网格的缺点

Jquery 在asp.net mvc视图中使用jqGrids等web网格的缺点,jquery,asp.net-mvc,asp.net-mvc-4,razor,jqgrid,Jquery,Asp.net Mvc,Asp.net Mvc 4,Razor,Jqgrid,在我以前的asp.net mvc web项目中,我使用手动进行列排序、筛选、搜索等 但是现在我读到了关于可用的WebGrids插件,比如jqGrid、jtable等,因为它可以节省我很多时间来提供排序、过滤和分页功能。 但是关于在asp.net mvc视图中使用这些web网格,我有几个问题,因为在使用这些web网格时,我似乎会丢失重要的asp.net mvc功能 例如,在构建jqgrid时,我将在razor视图中编写如下内容:- jQuery(“jQGridDemo”).jqGrid({

在我以前的asp.net mvc web项目中,我使用手动进行列排序、筛选、搜索等

但是现在我读到了关于可用的WebGrids插件,比如jqGrid、jtable等,因为它可以节省我很多时间来提供排序、过滤和分页功能。 但是关于在asp.net mvc视图中使用这些web网格,我有几个问题,因为在使用这些web网格时,我似乎会丢失重要的asp.net mvc功能

  • 例如,在构建jqgrid时,我将在razor视图中编写如下内容:-

jQuery(“jQGridDemo”).jqGrid({
url:“”,
数据类型:“json”,
colNames:['Id','First Name','Last Name','Last 4 SSN','Department',
“年龄”、“工资”、“地址”、“婚姻状况”],
colModel:[
{名称:''u id',索引:''u id',宽度:20,样式:'text'},
{name:'FirstName',索引:'FirstName',宽度:150},
{name:'LastName',索引:'LastName',宽度:150},
{name:'LastSSN',index:'LastSSN',宽度:100},
{名称:'Department',索引:'Department',宽度:80,对齐:“right”},
{name:'Age',index:'Salary',宽度:80,对齐:“right”},
{名称:'Salary',索引:'Salary',宽度:80,对齐:“right”},
{name:'Address',index:'Address',width:150,sortable:false},
{name:'MaritalStatus',index:'MaritalStatus',宽度:100,可排序:false}
],
rowNum:10,
sortname:'id',
viewrecords:是的,
巫师:“描述”,
描述:“列出员工详细信息”
});
因此,在本例中,我手动编写列名,如“FirstName”、“LastName”等,而不是依赖html模板帮助程序,如html.DisplayFor(modelitem=>modelitem.FirstName)。因此,我将失去拥有强类型视图的好处。此外,生成的字段名及其值将不基于数据注释中定义的内容,例如[DisplayName(“FirstName”)]。这是否意味着如果我使用jqGrid或其他web网格,我将失去任何数据注释(如DisplayName)的效果,因为我将在每个视图上手动写入字段名

  • 我读到的关于jqGrid的所有示例都将json传递给网格。那么jqGrid是接受从action方法传递到view的模型对象,还是只与json一起工作

  • 现在,当我在jqGrid中创建一个新项时,我将在jquery对话框中而不是在普通视图中执行此操作。这意味着我在模型类中定义的用于验证的数据注释(如[Required]、[Length]在jquery对话框中不会有任何效果,对吗?。因为根据我目前使用jquery对话框的经验,它们会忽略模型类中定义的DataAnnotation,而且如果我在asp.net mvc提供的ModelState中添加错误,那么如果在创建后操作方法中发生异常,我将无法在对话框中显示ModelState错误


有人能就这些问题提出建议吗?在使用asp.net mvc的web网格时,这些建议是否有效?

首先,您应该了解jqGrid是纯JavaScript解决方案。因此,它不能直接访问数据模型的属性,但可以使用.NET反射来获取信息并向jqGrid提供名称。正是因为jqGrid是纯JavaScript解决方案,所以它不能直接访问元数据。另一方面,它提供了许多定制可能性,允许在服务器端生成所有必需的信息,并将其返回给jqGrid

我明白MVC并不意味着你必须用C#编写所有的视图代码。在使用jqGrid时,您需要提供一个带有唯一
id
属性的空
,并在底部寻呼机上可选地提供一个空
。此外,还必须在控制器中提供一个操作,该操作以JSON格式为网格返回数据

使用
template
属性(请参阅)可以使
colModel
更简单、更面向数据。我建议您阅读并解释在处理前
回调(主要使用
setColProp
setLabel
方法)如何允许创建非常灵活的网格,该模型将从服务器动态返回。我认为这是你想要实现的。此外,您还可以找到
addColumn
方法的beta版,该方法允许向网格动态添加新列

关于验证,我可以确认,jqGrid允许您对客户端进行不太舒服的验证。然而,允许定义任何自定义验证方法。此外,还可以使用服务器端验证。服务器只需返回一个带有错误描述的异常(在HTTP正文中设置错误文本和任何HTTP错误状态代码)。错误将显示在编辑对话框的顶部,用户可以修复输入数据并再次尝试单击“提交”按钮

上述所有功能都不是现成的,但是有一些基于jqGrid的C#解决方案可以简化工作。我可以提一下。我个人不使用这些产品,因此我无法向您提供更多有关这些产品的详细信息

更新:我认为jqGrid不会破坏MVC架构。ASP.NET MVC的最新发展方向是Web API,它完全适合jqGrid。我个人更喜欢Web API,而不是没有它的纯ASP.NET MVC。可以很好地测试任何Web API,例如,如果项目中需要它的话。的主架构没有任何.NET属性,如
DisplayName
Required
Length
等。这只是实施的一部分。如果我开发一个解决方案
<script type="text/javascript">
    jQuery("#jQGridDemo").jqGrid({
        url: '',
        datatype: "json",
        colNames: ['Id','First Name', 'Last Name', 'Last 4 SSN', 'Department', 
                'Age', 'Salary',  "Address",'Marital Status'],
        colModel: [
        { name: '_id', index: '_id', width: 20, stype: 'text' },
        { name: 'FirstName', index: 'FirstName', width: 150 },
        { name: 'LastName', index: 'LastName', width: 150 },
           { name: 'LastSSN', index: 'LastSSN', width: 100 },
        { name: 'Department', index: 'Department', width: 80, align: "right" },
        { name: 'Age', index: 'Salary', width: 80, align: "right" },
        { name: 'Salary', index: 'Salary', width: 80, align: "right" },
        { name: 'Address', index: 'Address', width: 150, sortable: false },
        { name: 'MaritalStatus', index: 'MaritalStatus', width: 100, sortable: false }
      ],
        rowNum: 10,
        sortname: 'id',
        viewrecords: true,
        sortorder: "desc",
        caption: "List Employee Details"
    });
</script>