服务器响应状态为 500(内部服务器错误)- MVC C#

问题描述 投票:0回答:1

当我尝试通过从 Jquery 数据表向控制器发送 ajax 请求来获取详细信息时,出现内部服务器错误。即使在控制器中,代码也能正常工作,结果也是如此。但是我在“HTTPGET”和“HTTPPOST”请求中都遇到了这个错误。

这是我的代码。

` Employee.cshtml

依赖关系

    <script src="~/Scripts/jquery-3.4.1.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="~/Scripts/bootstrap.js"></script>
<script src="~/Scripts/DataTables/DataTables-1.13.4/js/jquery.dataTables.js" defer="defer"></script>
<script src="~/Scripts/DataTables/DataTables-1.13.4/js/dataTables.bootstrap.js" defer="defer"></script>

    <script type="text/javascript">
    $(document).ready(function () {
        debugger;
        $('#empTable').DataTable({
            "columnDefs": [
                { "searchable": true,  targets: "_all" },
                { "className": "text-center custom-middle-align", targets: "_all" }
            ],
            "processing": true,
            "serverSide": true,
            "ajax":
            {
                "url": "/Employee/GetEmployeeDetails",
                "type": "POST",
                "dataType": "json",
                "dataSrc": function (response) {
                    debugger;
                    resultObj = $.parseJSON(response.data)
                    return resultObj.data;
                },
                "error": function (jqXhr, textStatus, errorMessage) { // error callback 
                    console.log('Error: ' + errorMessage + '    request.statusText:' + jqXhr.statusText);
                }
            }
        });

    });
</script>

Employee.cs

[HttpPost]
    public JsonResult GetEmployeeDetails()
    {
        connection();
        SqlCommand cmd = new SqlCommand("GetEmployeeDetails", con);
        cmd.CommandType = CommandType.StoredProcedure;
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        DataTable dt = new DataTable();
        dt.Load(dr);

        //Note I have tried both SqlDataAdapter and SqlDataReader
        //SqlDataAdapter da = new SqlDataAdapter();
        //da.Fill(dt);

        con.Close();
        return Json(dt);
    }
javascript ajax asp.net-core datatable asp.net-core-mvc
1个回答
0
投票

我在尝试获取详细信息时遇到内部服务器错误 通过从 Jquery 数据表向控制器发送 ajax 请求。 即使在控制器中,代码也能正常工作,结果也是如此。但是我 在“HTTPGET”和“HTTPPOST”请求中都出现此错误。

实际上,您收到了预期的错误,因为您直接将 dataTable 值绑定到 Json 数据中,而没有任何序列化,因此会出现以下错误。

错误:

解决方案:

为了摆脱导致 500 错误的序列化失败,您需要解析数据表值。让我们看看我们如何做到这一点。

        [HttpPost]
        public JsonResult GetEmployeeDetails()
        {
            using (SqlConnection con = new SqlConnection(connectionString))
            {

                SqlCommand cmd = new SqlCommand("GetEmployeeDetails", con);
                cmd.CommandType = CommandType.StoredProcedure;
                con.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);

                //Note I have tried both SqlDataAdapter and SqlDataReader
                //SqlDataAdapter da = new SqlDataAdapter();
                //da.Fill(dt);

                con.Close();
                string serializeObject = JsonConvert.SerializeObject(dt);
                return Json(serializeObject);
            }
        }

输出:

但是,如果您想在那种情况下解析到您的类对象,您将需要额外的反序列化,如下所示:

string serializeObject = JsonConvert.SerializeObject(dt);
var desrializationIntoClass = JsonConvert.DeserializeObject<List<YourClassName>>(serializeObject);
return Json(desrializationIntoClass);

© www.soinside.com 2019 - 2024. All rights reserved.