尝试将使用C#Web方法(ASP .NET)的SQL Server中的数据绑定到使用jQuery编码的网格

Lihka_nonem

希望我的问题的标题具有描述性,并有助于您理解我所面临的问题。我是编程新手,我知道我所面临的问题只是初学者会遇到的问题。请帮帮我。请耐心等待,因为这是一个很长的描述。我知道这个社区中的大多数人都是非常有经验的程序员,不需要这种详细的方法,但是我并不是想浪费时间,我相信通过提供这样的详细说明,您将能够更好地帮助我。现在关于这个问题,我正在尝试使用jQuery构建网格:

https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/index.htm#demos/jqxgrid/defaultfunctionality.htm

我已使用上面链接中的源代码来构建网格,但是当我运行该程序时,数据不会显示。我确定问题出在jQuery,因为我已经单独运行了Web服务,并且它连接到SQL Server并以JSON数组的形式显示输出。

我已将解决方案分为Visual Studio 2019上的三个项目:

  1. PracticeValidation项目-包含3个.aspx c#Web表单。一个用于主页,另一个用于食谱表格,第三个用于员工表格。
  2. WebServicesFunctionality项目-包含一个.asmx Web服务文件,该文件包含2种Web方法(一种用于配方形式,另一种用于员工形式),用于将列表形式的数据序列化为JSON数组。请在下面找到该Web服务的代码。
[System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string GetRecipe()
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string recipeList = String.Empty;
            List<FormGeneratorClass.FormGeneratorVar.RecipeVar> recipeCatcher = new List<FormGeneratorClass.FormGeneratorVar.RecipeVar>();
            recipeCatcher = FormGeneratorClass.FormGeneratorVar.ExecuteRecipeList();
            if (recipeCatcher != null && recipeCatcher.Count > 0)
            {
                recipeList = js.Serialize(recipeCatcher);
            }
            else
                recipeList = js.Serialize("No recipes!");
            return recipeList;
        }

        [WebMethod]
        public string GetEmp()
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string EmployeeList = String.Empty;
            List<FormGeneratorClass.FormGeneratorVar.EmpVar> employeeCatcher = new List<FormGeneratorClass.FormGeneratorVar.EmpVar>();
            employeeCatcher = FormGeneratorClass.FormGeneratorVar.ExecuteEmployeeList();
            if (employeeCatcher != null && employeeCatcher.Count > 0)
            {
                EmployeeList = js.Serialize(employeeCatcher);
            }
            else
                EmployeeList = js.Serialize("No recipes!");
            return EmployeeList;
        }
    }
  1. FormGeneratorClass项目:该项目包含一个ac#类文件,该文件负责与SQL Server进行交互。我在下面的文件中附加了代码。
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FormGeneratorClass
{
    public class FormGeneratorVar
    {
        public class RecipeVar
        {
            public int Recipe_Id { get; set; }
            public string Recipe_Name { get; set; }
        }

        public class EmpVar
        {
            public int Emp_Id { get; set; }
            public string Emp_FirstName { get; set; }
            public string Emp_LastName { get; set; }
        }

        public static List<RecipeVar> ExecuteRecipeList()
        {
            List<RecipeVar> listRecipe = new List<RecipeVar>();
            string strConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            using (SqlConnection con = new SqlConnection(strConnString))
            {
                string sqlSelectAllQuery = "SELECT * FROM Tbl_Recipe";
                SqlCommand cmd = new SqlCommand(sqlSelectAllQuery, con);
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    RecipeVar recipe = new RecipeVar();
                    recipe.Recipe_Id = !(rdr["recipe_id"] == DBNull.Value) ? Convert.ToInt32(rdr["recipe_id"]) : 0;
                    recipe.Recipe_Name = !(rdr["recipe_name"] == DBNull.Value) ? Convert.ToString(rdr["recipe_name"]) : string.Empty;
                    listRecipe.Add(recipe);
                }
                con.Close();
            }
            return listRecipe;
        }

        public static List<EmpVar> ExecuteEmployeeList()
        {
            List<EmpVar> listEmployee = new List<EmpVar>();
            string strConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            using (SqlConnection con = new SqlConnection(strConnString))
            {
                string sqlSelectAllQuery = "SELECT * FROM Tbl_Emp";
                SqlCommand cmd = new SqlCommand(sqlSelectAllQuery, con);
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    EmpVar employee = new EmpVar();
                    employee.Emp_Id = !(rdr["emp_id"] == DBNull.Value) ? Convert.ToInt32(rdr["emp_id"]) : 0;
                    employee.Emp_FirstName = !(rdr["emp_firstName"] == DBNull.Value) ? Convert.ToString(rdr["emp_firstName"]) : string.Empty;
                    employee.Emp_LastName = !(rdr["emp_lastName"] == DBNull.Value) ? Convert.ToString(rdr["emp_lastName"]) : string.Empty;
                    listEmployee.Add(employee);
                }
                con.Close();
            }
            return listEmployee;
        }
    }
}

我将把WebServicesFunctionality项目(pt.2)设置为启动项目,并对获得的结果进行截图以供参考

  1. Web服务已加载到我的本地浏览器中

  2. 调用员工Web方法后的输出

  3. 调用配方Web方法后的输出

现在,我确信所有阅读这篇文章的人都会对我要尝试做的事情有一个更清晰的认识。因此,现在我将附上员工.aspx页面的代码。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EmployeeRecord.aspx.cs" Inherits="PracticeValidation.WebForm2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Record of employees</title>
    <meta name="description" content="JavaScript Grid with rich support for Data Filtering, Paging, Editing, Sorting and Grouping" />
    <link href="Scripts/jqx.base.css" rel="stylesheet" type="text/css"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1" />
    <script src="Scripts/jquery-1.11.1.min.js"></script>
    <script src="Scripts/jqxcore.js"></script>
    <script src="Scripts/jqxdata.js"></script>
    <script src="Scripts/jqxbuttons.js"></script>
    <script src="Scripts/jqxscrollbar.js"></script>
    <script src="Scripts/Menu.js"></script>
    <script src="Scripts/jqxcheckbox.js"></script>
    <script src="Scripts/jqxlistbox.js"></script>
    <script src="Scripts/jqxdropdownlist.js"></script>
    <script src="Scripts/jqxgrid.js"></script>
    <script src="Scripts/jqxgrid.sort.js"></script>
    <script src="Scripts/jqxgrid.pager.js"></script>
    <script src="Scripts/jqxgrid.selection.js"></script>
    <script src="Scripts/jqxgrid.edit.js"></script>
    <script src="Scripts/demos.js"></script>
    <script type="text/javascript">
            $(document).ready(function () {
                //Getting the source data with ajax GET request
                source = {
                    datatype: "json",
                    datafields: [
                        { name: 'EmpID' },
                        { name: 'EmpLastName' },
                        { name: 'EmpFirstName' }
                    ],
                    async: false,
                    record: 'Table',
                    url: 'WebService1.asmx/GetEmp',

                };
                var dataAdapter = new $.jqx.dataAdapter(source,
                    { contentType: 'application/json; charset=utf-8' }
                );
                $("#grid").jqxGrid({
                    source: dataAdapter,
                    theme: 'classic',
                    width: '100%',

                    columns: [
                        { text: 'EmpID', dataField: 'EmpID', width: 250, hidden: false },
                        { text: 'EmpLastName', dataField: 'EmpLastName', width: 150 },
                        { text: 'EmpFirstName', dataField: 'EmpFirstName', width: 180 },
                    ]
                });
            });
    </script>
</head>
<body class ='default'>
    <form id="form1" runat="server">
        <div>
            <h1>Welcome to the record of employees page</h1>
            <h4>Click <a href="HomePage.aspx">here</a> to go back to the main login page</h4>
        </div>
        <div id="grid">
        </div>
    </form>
</body>
</html>

最后,我将附上我得到的输出的屏幕截图。

员工记录.aspx页的输出: 在此处输入图片说明

感谢所有阅读整篇文章并保持安全的人!

Lihka_nonem

我弄清楚哪里出了问题。有很多原因导致数据没有按照我想要的方式绑定到网格。我希望这对其他遇到相同问题的人有所帮助。

如果要像我一样创建解决方案,则需要解决的第一个问题是需要创建一个代理Web服务,该代理Web服务从Web服务获取数据。这是因为Web服务项目和Web表单项目在不同的端口上运行。因此,即使一切正常,发出AJAX请求时也会收到404错误。因此,可以从Web表单项目中创建Web服务代理,或者放弃创建单独的Web服务项目的想法。

我遇到的下一个问题是笨拙,花了我很长时间才弄清楚。无论将来自SQL的数据序列化为JSON,实际上从Web服务发送回的数据都是XML。这是因为Web服务使用SOAP,因此默认情况下,数据传输的方法是XML。如果您运行Web服务并观察数据,则将看到带有XML包装器的JSON字符串。如果您打开Chrome开发工具并查看内容类型,您会看到其返回XML,并且无论您做什么,都无法阻止Web服务通过AJAX“ GET”请求返回XML。那么,您如何解决问题呢?两种方式:

方法1:使用Web API代替Web服务。这将允许您使用REST服务。

方法2:如果您坚持使用Web服务,那么以下链接将非常有帮助。https://www.one-tab.com/page/IjhbYbayRlWka-8ruNI87w

在我得到AJAX之后,从Web服务成功返回JSON。下一个问题是将数据绑定到网格插件。这非常简单明了。找到您要使用的方法的演示并将其复制粘贴到AJAX请求的成功回调函数中。您甚至可以通过在AJAX请求的成功回调函数内部调用用户定义函数来传递接收的数据。

有时,使用AJAX请求使用Web服务时,您可能会遇到问题,该请求说“序列化或反序列化期间发生错误。超过了JSON最大长度属性”。如果您确实遇到这种情况,请尝试将javascriptSerializer对象初始化为maxInt值。

如果您使用的是Newtonsoft .JSON,请检查是否使用常规javascriptSerializer类对数据进行序列化。我之所以这样说,是因为AJAX使用javascriptSerializer和Newtonsoft .JSON请求序列化数据倾向于忽略循环引用错误。结果,当您的Web服务实际上正在运行循环引用错误时,Ajax函数可能会引发“序列化或反序列化期间发生错误。超出了JSON最大长度属性”错误。在这种情况下,请考虑对要使用的SP或查询进行更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试在VB.NET中使用C#Web服务

来自分类Dev

使用asp.net C#Web表单验证多文件上传

来自分类Dev

SQL数据作为树结构绑定到ASP.NET网格

来自分类Dev

尝试使用asp.net Web应用程序将数据插入SQL Server数据库,出现错误

来自分类Dev

如何使用asp.net c#将使用jsPDF生成的PDF附加到邮件中

来自分类Dev

使用jQuery AJAX将数据集绑定到ASP.Net Div标签

来自分类Dev

从C#Web API方法下载ZipArchive在Chrome中返回“ net :: ERR_CONNECTION_RESET”

来自分类Dev

使用web.config到本地SQL Server数据库的ASP.NET连接字符串

来自分类Dev

如何在ASP.NET C#中从SQL Server到GridView中选择数据

来自分类Dev

如何使用asp.net将数据表传递到SQL Server

来自分类Dev

SQL Server 使用 ASP.NET 检索数据

来自分类Dev

将asp.net C#Web服务的datetime值转换为android(Java)中的Date对象

来自分类Dev

使用SDK将Quickbook数据输入到Sql Server中

来自分类Dev

如何使用C#使用SQL Server数据库更新ASP.NET中的配置文件

来自分类Dev

使用 Asp net 从客户端运行查询到 sql server 的最安全方法

来自分类Dev

使用SQL Server在ASP.NET中动态查询

来自分类Dev

使用 SQL 和 Asp.net Gridview 的渐变网格视图

来自分类Dev

如何使用绑定将多个表显示到数据网格中?

来自分类Dev

数据绑定到asp.net中的dropdownlist?

来自分类Dev

使用linq和反射将属性绑定到ASP.NET中的Web控件

来自分类Dev

使用Asp.net C#中的文件上传功能将数据从.csv导入SQL Server

来自分类Dev

使用SQL Server CE数据库慢速查询的C#/ ASP.NET网站

来自分类Dev

使用asp.net C#TextFieldParser将数据从CSV导出到SQL Server

来自分类Dev

从.NET Web服务中的远程SQL Server获取数据

来自分类Dev

通过使用存储过程或实体框架将数据从sql Server 2008检索到ASP.NET MVC 4

来自分类Dev

使用动态 sql 和 sql 连接的多个搜索条件中的问题 asp.net c# sql server

来自分类Dev

如何使用 ADO.NET 从 C# 中的 SQL Server 检索数据?

来自分类Dev

如何在ASP.NET应用程序中使用SQL Server中的SQL Server Profiler?

来自分类Dev

无法使用asp.net Web应用程序将数据插入SQL Server数据库

Related 相关文章

  1. 1

    尝试在VB.NET中使用C#Web服务

  2. 2

    使用asp.net C#Web表单验证多文件上传

  3. 3

    SQL数据作为树结构绑定到ASP.NET网格

  4. 4

    尝试使用asp.net Web应用程序将数据插入SQL Server数据库,出现错误

  5. 5

    如何使用asp.net c#将使用jsPDF生成的PDF附加到邮件中

  6. 6

    使用jQuery AJAX将数据集绑定到ASP.Net Div标签

  7. 7

    从C#Web API方法下载ZipArchive在Chrome中返回“ net :: ERR_CONNECTION_RESET”

  8. 8

    使用web.config到本地SQL Server数据库的ASP.NET连接字符串

  9. 9

    如何在ASP.NET C#中从SQL Server到GridView中选择数据

  10. 10

    如何使用asp.net将数据表传递到SQL Server

  11. 11

    SQL Server 使用 ASP.NET 检索数据

  12. 12

    将asp.net C#Web服务的datetime值转换为android(Java)中的Date对象

  13. 13

    使用SDK将Quickbook数据输入到Sql Server中

  14. 14

    如何使用C#使用SQL Server数据库更新ASP.NET中的配置文件

  15. 15

    使用 Asp net 从客户端运行查询到 sql server 的最安全方法

  16. 16

    使用SQL Server在ASP.NET中动态查询

  17. 17

    使用 SQL 和 Asp.net Gridview 的渐变网格视图

  18. 18

    如何使用绑定将多个表显示到数据网格中?

  19. 19

    数据绑定到asp.net中的dropdownlist?

  20. 20

    使用linq和反射将属性绑定到ASP.NET中的Web控件

  21. 21

    使用Asp.net C#中的文件上传功能将数据从.csv导入SQL Server

  22. 22

    使用SQL Server CE数据库慢速查询的C#/ ASP.NET网站

  23. 23

    使用asp.net C#TextFieldParser将数据从CSV导出到SQL Server

  24. 24

    从.NET Web服务中的远程SQL Server获取数据

  25. 25

    通过使用存储过程或实体框架将数据从sql Server 2008检索到ASP.NET MVC 4

  26. 26

    使用动态 sql 和 sql 连接的多个搜索条件中的问题 asp.net c# sql server

  27. 27

    如何使用 ADO.NET 从 C# 中的 SQL Server 检索数据?

  28. 28

    如何在ASP.NET应用程序中使用SQL Server中的SQL Server Profiler?

  29. 29

    无法使用asp.net Web应用程序将数据插入SQL Server数据库

热门标签

归档