当我尝试通过从 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);
}
我在尝试获取详细信息时遇到内部服务器错误 通过从 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);