【问题标题】:Jquery DataTable with server side using asmxJquery DataTable 与服务器端使用 asmx
【发布时间】:2016-11-06 22:59:59
【问题描述】:

我正在使用带有处理选项的服务器端的 Jquery Datatable 1.10.12。我尝试了他们网站JQuery Data table server side 上的代码,但没有运气。我做错了哪个页面没有显示记录并给出错误 500 任何帮助都会很棒。

我的代码:

.aspxpage

   <script>
    $(document).ready(function () {
       $('#example').DataTable({
            serverSide: true,
            ajax: 'EmployeeService.asmx/GetPersons'
        });
        });    
      </script>
    <body>
    <table id="example" class="display" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>BusinessEntityID</th>
            <th>FirstName</th>
            <th>MiddleName</th>
            <th>LastName</th>
            <th>PersonType</th>
        </tr>
    </thead>       
    </table>    
    </body>

  asmx:
    [WebMethod]
    public void GetPersons(int iDisplayLength, int iDisplayStart, int   iSortCol_0, string sSortDir_0, string sSearch )

    {
        int displayLength = iDisplayLength;
        int displayStart = iDisplayStart;
        int sortCol = iSortCol_0;
        string  sortDir = sSortDir_0;
        string search = sSearch;
        List<Person> pdetails = new List<Person>();
        int filteredcount = 0;
        using (SqlConnection con = new SqlConnection("Data Source=xxx;Initial Catalog=AdventureWorks;Integrated Security=True"))
        {
            SqlCommand cmd = new SqlCommand(("spGetPersons"), con);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter pDisplayLength = new SqlParameter()
            {
                ParameterName = "@DisplayLength",
                Value = displayLength
            };
            cmd.Parameters.Add(pDisplayLength);
            SqlParameter pDisplayStart = new SqlParameter()
            {
                ParameterName = "@DisplayStart",
                Value = displayStart
            };
            cmd.Parameters.Add(pDisplayStart);
            SqlParameter pSortCol = new SqlParameter()
            {
                ParameterName = "@SortCol",
                Value = sortCol
            };
            cmd.Parameters.Add(pSortCol);
            SqlParameter pSortDir = new SqlParameter()
            {
                ParameterName = "@SortDir",
                Value = sortDir
            };
            cmd.Parameters.Add(pSortDir);
            SqlParameter pSearchString = new SqlParameter()
            {
                ParameterName = "@Search",
                Value = string.IsNullOrEmpty(search)?null:search
            };
            cmd.Parameters.Add(pSearchString);
            con.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                Person per = new Person();
                per.BusinessEntityID = rdr["BusinessEntityID"].ToString();
                filteredcount = Convert.ToInt32(rdr["TotalCount"].ToString());
                per.FirstName = rdr["FirstName"].ToString();
                per.MiddleName = rdr["MiddleName"].ToString();
                per.LastName = rdr["LastName"].ToString();
                per.PersonType = rdr["PersonType"].ToString();
                pdetails.Add(per);
            }
        }

        var result = new
        {

            draw = 1, 
            recordsTotal = GetPersonsTotalCount(),
            recordsFiltered = filteredcount,
            data = pdetails
        };

        JavaScriptSerializer js = new JavaScriptSerializer();
        js.MaxJsonLength = 2147483644;
       Context.Response.Write(js.Serialize(result));
    }

    private int GetPersonsTotalCount()
    {
        int totalPersonCount = 0;
        using (SqlConnection con = new SqlConnection("Data Source=xxx;Initial Catalog=AdventureWorks;Integrated Security=True"))
        {
            SqlCommand cmd = new SqlCommand(("select count(*) from Person.Person"), con);
            con.Open();
            totalPersonCount = (int)cmd.ExecuteScalar();
        }
        return totalPersonCount;
    }
    public class Person
    {
        public string BusinessEntityID { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string PersonType { get; set; }

    }

   JSON :

  {"draw":1,"recordsTotal":19972,"recordsFiltered":19972,"data":[{"BusinessEntityID":"1","FirstName":"Ken","MiddleName":"J","LastName":"Sánchez","PersonType":"EM"},{"BusinessEntityID":"2","FirstName":"Terri","MiddleName":"Lee","LastName":"Duffy","PersonType":"EM"},{"BusinessEntityID":"3","FirstName":"Roberto","MiddleName":"","LastName":"Tamburello","PersonType":"EM"},{"BusinessEntityID":"4","FirstName":"Rob","MiddleName":"","LastName":"Walters","PersonType":"EM"},{"BusinessEntityID":"5","FirstName":"Gail","MiddleName":"A","LastName":"Erickson","PersonType":"EM"},{"BusinessEntityID":"6","FirstName":"Jossef","MiddleName":"H","LastName":"Goldberg","PersonType":"EM"},{"BusinessEntityID":"7","FirstName":"Dylan","MiddleName":"A","LastName":"Miller","PersonType":"EM"},{"BusinessEntityID":"8","FirstName":"Diane","MiddleName":"L","LastName":"Margheim","PersonType":"EM"},{"BusinessEntityID":"9","FirstName":"Gigi","MiddleName":"N","LastName":"Matthew","PersonType":"EM"},{"BusinessEntityID":"10","FirstName":"Michael","MiddleName":"","LastName":"Raheem","PersonType":"EM"}]}

错误:

http://localhost:64400/EmployeeService.asmx/GetPersons?draw=1&columns%5B0%5…art=0&length=10&search%5Bvalue%5D=&search%5Bregex%5D=false&_=1478471333896 加载资源失败:服务器响应状态为 500 (内部服务器错误)“/”应用程序中的服务器错误。

请求格式无法识别,因为 URL 意外以 '/GetPersons'。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详细信息:System.InvalidOperationException:请求格式为 无法识别以“/GetPersons”结尾的 URL。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[InvalidOperationException:无法识别 URL 的请求格式 意外以“/GetPersons”结尾。]
System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(类型 类型、HttpContext 上下文、HttpRequest 请求、HttpResponse 响应) +169669 System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext 上下文、字符串动词、字符串 url、字符串文件路径)+209
System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext 上下文,字符串 requestType,字符串 url,字符串路径翻译)+120
System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +339 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

【问题讨论】:

    标签: c# asp.net webforms datatables


    【解决方案1】:

    请像这样修改你的 Asmx 文件

     [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    [ScriptMethod(UseHttpGet=true)]
        public void GetPersons(int iDisplayLength, int iDisplayStart, int   iSortCol_0, string sSortDir_0, string sSearch )
    
    {
    }
    

    Modifi web config 在 webServices 中添加协议

    <system.web>
    <webServices>
          <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
          </protocols>
    

    【讨论】:

    • 嗨拉杰希。感谢您的帮助和代码。我的 xxx 中有 [System.Web.Script.Services.ScriptService]。 asmx.cs 文件。 [System.Web.Script.Services.ScriptService] 公共类 ABCDetailService : System.Web.Services.WebService { [WebMethod] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public void GetPersons(int iDisplayLength, int iDisplayStart, int iSortCol_0, 字符串 sSortDir_0, 字符串 sSearch) { }
    • 错误:System.InvalidOperationException:缺少参数:iDisplayLength。在 System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection 集合) 在 System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 在 System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
    • 请在ajax调用中传递所有参数值
    • 就个人而言,我的网络方法使用 post 而不是 get 取得了更大的成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2015-12-08
    • 2021-03-20
    • 2018-11-13
    • 2021-08-14
    • 2017-04-30
    相关资源
    最近更新 更多