【问题标题】:Disadvantages of using web grids such as jqGrids inside my asp.net mvc views在我的 asp.net mvc 视图中使用诸如 jqGrids 之类的 web 网格的缺点
【发布时间】:2014-11-13 11:40:52
【问题描述】:

在我之前的asp.net mvc web项目中,我使用手动做列排序、过滤、搜索等。

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

  • 例如,在构建 jqgrid 时,我将在我的 razor 视图中编写如下内容:-
<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>

所以在这种情况下,我手动编写列名,例如“FirstName”、“LastName”等,而不是依赖 html 模板化帮助程序,例如 Html.DisplayFor(modelitem=>modelitem.FirstName)。所以我将失去拥有强类型视图的好处。生成的字段名称及其值也不会基于数据注释中定义的内容,例如 [DisplayName("First Name")] 。那么这是否意味着如果我使用 jqGrid 或其他 web 网格,我将失去任何数据注释(如 DisplayName)的效果,因为我将在每个视图上手动编写字段名称?。

  • 我读到的所有关于 jqGrid 的例子都将 json 传递给了网格。那么 jqGrid 是否接受从操作方法传递给视图的模型对象,或者它仅适用于 json ?

  • 现在,当我在 jqGrid 中创建新项目时,我将在 jquery 对话框中而不是在普通视图中执行此操作。所以这意味着我在模型类中定义的用于验证的数据注释[必需]、[长度] 在 jquery 对话框中不会有任何影响,这是正确的吗?因为根据我目前对 jquery 对话框的经验,他们将忽略 Model 类中定义的 DataAnnotation,而且如果我在 asp.net mvc 提供的 ModelState 中添加错误,那么如果发生异常,我将无法在对话框中显示 modelstate 错误在 Post Create 操作方法中,?

在使用带有 asp.net mvc 的 web 网格时,任何人都可以就这些点以及它们是否有效提供建议?

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-4 razor jqgrid


    【解决方案1】:

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

    我看到 MVC 并不意味着您必须用 C# 编写所有 View 代码。在使用 jqGrid 的情况下,您需要为底部寻呼机提供具有唯一 id 属性的空 &lt;table&gt; 和可选的空 &lt;div&gt;。此外,您必须在控制器中提供一个动作,它以 JSON 格式为网格返回 数据

    template 属性的使用(参见the old answer)为您提供了保持colModel 简单且更面向数据的可能性。我建议您阅读the answerthis one,其中我解释了beforeProcessing 回调(主要使用setColPropsetLabel 方法)如何允许创建非常灵活的网格,该模型将从服务器动态返回。我认为这是你想要实现的。此外,您还可以找到addColumn 方法的here beta 版本,该方法允许将新列动态添加到网格中。

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

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

    更新:我不认为 jqGrid break MVC 架构。 ASP.NET MVC 的最新发展方向是完全适合 jqGrid 的 Web API。我个人更喜欢 Web API 作为没有它的纯 ASP.NET MVC。例如,如果您的项目需要它,可以很好地测试任何 Web API。 MVC 的主要架构没有 DisplayNameRequiredLength 等任何 .NET 属性。这只是实现的一部分而已。如果我开发了一个解决方案,那么遵循一种方式对我来说并不重要,例如 Microsoft ASP.NET MVC。我应该选择更符合任务的技术。例如,可以从数据库中获取DisplayName 信息,其中包含不同语言的文本,也可以从数据库的相应表中获取类型、长度和Required (NOT NULL) 信息。如果您从 null 开始开发,您可以选择 Entity Framework 模型作为信息的来源。最佳选择取决于多方面。

    无论如何,我发现仅仅遵循一种建议制造一种产品的方式是危险的。前段时间微软推出了 ASP.NET Web Forms。我认为其中一个原因是开发人员绑定到为您生成代码的 Visual Studio GUI。我可以想象以前编写过很多此类代码的开发人员的问题。同理,可以按照纯微软 ASP.NET MVC 的方式生成大量的 View。如果将来迁移,您会怎么做?另一方面,如果您在用 ASMX 编写的返回纯 JSON 的 WebMethods 上投入更多,您可以很容易地将代码迁移到 SVC(ServiceModel),然后再迁移到 Web API。可以使用 JavaScript 在 HTML 中编写视图部分,并根据您的要求组合不同的 JavaScript“库”。 jqGrid 只是一个可以在客户端使用的组件。这是我个人喜欢的方式,但每个人都选择了自己的方式。

    【讨论】:

    • 感谢您的回复。这就是我要问的,是使用 jqGrid 将主要破坏 asp.net mvc 架构及其相关功能。这可能是为什么当我阅读许多 asp.net mvc 书籍(例如“pro asp.net mvc5”和“professional asp.net vmc 5”)时,没有一篇描述这些网络网格的原因。当涉及到排序和过滤时,这些书籍展示了如何从头开始实现这些功能。所以我不知道为什么 asp.net mvc 没有提供一个更好用并且适合 asp.net mvc 框架的 web 网格?
    • @johnG:不客气!我首先开始写我的评论,但后来在我描述我观点的 UPDATED 部分附加了我的答案。我不想继续“永无止境的讨论”。我希望我能解释我对这个主题的立场。
    • 感谢您提供的信息,基本上我正在使用带有实体框架的 asp.net mvc。现在你说如果需要的话我应该研究一下asp.net mvc之外的其他框架,它为未来的迁移提供了更多的支持,并且更适合jqGrid。但我认为目前我无法研究其他框架。我想做的是找到 asp.net mvc 支持的工具和插件,而不是其他方式...
    • @johnG:你误解了我对框架的理解。我的意思是jQuery的使用,jQuery UI一些开源插件,如select2,Font Awesome,Bootstrap等。您可以在 JavaScript 代码(以及 jqGrid 中)中集成许多免费的解决方案,这些解决方案可以改善用户体验。这就是我的意思。在 ASP.NET MVC 之外还有很多可能性,我认为最好的方法是结合这种解决方案,而不仅仅是使用高速公路 ASP.NET MVC。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多