在使用 Newtonsoft 之后,ajax 调用在 asp.net 中返回 HTML 响应而不是 Json
Posted
技术标签:
【中文标题】在使用 Newtonsoft 之后,ajax 调用在 asp.net 中返回 HTML 响应而不是 Json【英文标题】:ajax call return HTML response instead of Json in asp.net after using Newtonsoft as well 【发布时间】:2019-09-22 01:24:27 【问题描述】:我正在使用 ajax 调用在我的 Ajax 代码之后使用 asp.net Web 表单绑定下拉索引更改事件的数据
var e = document.getElementById("<%=ddlEducation.ClientID%>");
var value = e.options[e.selectedIndex].value;
var text = e.options[e.selectedIndex].text;
if (value == "0")
$('#dvRecords').empty();
alert("Please Select Education");
return false;
var obj = "iEduid": value;
var myJSON = JSON.stringify(obj);
//Filling Grid View
$.ajax(
type: 'POST',
contentType: "application/json; charset=utf-8",
url: 'EditProfile.aspx/BINDEducationDATA',
data: myJSON,
dataType: 'JSON',
success: function (response)
document.getElementById("ctl00_ContentPlaceHolder2_lblstram").value = response.d[i].eduStream
document.getElementById("ctl00_ContentPlaceHolder2_lbldescs").value = response.d[i].Edu_Description
,
error: function (xhr, status, error)
console.log(xhr);
alert(status);
alert(error);
);
以上代码返回 html 响应而不是 JSON
我的 C# 代码
[WebMethod]
public static List<EduDesc> BINDEducationDATA(string iEduid)
List<EduDesc> details = new List<EduDesc>();
DataTable dtManager = new DataTable();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString))
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
cmd = new SqlCommand("Select Edu_Stream,Edu_Description from tbl_education WHERE ID='" + iEduid + "'", con);
da.SelectCommand = cmd;
da.Fill(dtManager);
foreach (DataRow dtrow in dtManager.Rows)
EduDesc logs = new EduDesc();
logs.Edu_desc = (dtrow["Edu_Description"].ToString());
logs.eduStream = dtrow["Edu_Stream"].ToString();
details.Add(logs);
return details;
我的班级
public class EduDesc
public string Edu_desc get; set;
public string iEduid get; set;
public string eduStream get; set;
任何帮助将不胜感激。
【问题讨论】:
请发布您的 CS 代码 问题已更新 How do I get ASP.NET Web API to return JSON instead of XML using Chrome?的可能重复 它返回的 XML 我得到了 HTMl,所以我的问题是不同的 【参考方案1】:您应该将[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
添加到您的方法中
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static List<EduDesc> BINDEducationDATA(string iEduid)
【讨论】:
【参考方案2】:包括
using Newtonsoft.Json;
并使用此更改脚本 WebMethod 属性:
[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]
你的 CS 应该是这样的:
[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]
public static List<EduDesc> BINDEducationDATA(string iEduid)
List<EduDesc> details = new List<EduDesc>();
DataTable dtManager = new DataTable();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString))
SqlCommand cmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
cmd = new SqlCommand("Select Edu_Stream,Edu_Description from tbl_education WHERE ID='" + iEduid + "'", con);
da.SelectCommand = cmd;
da.Fill(dtManager);
foreach (DataRow dtrow in dtManager.Rows)
EduDesc logs = new EduDesc();
logs.Edu_desc = (dtrow["Edu_Description"].ToString());
logs.eduStream = dtrow["Edu_Stream"].ToString();
details.Add(logs);
return JsonConvert.SerializeObject(details);
【讨论】:
上述代码没有成功,我将列表对象转换为字符串 这里是一个将List对象转换成字符串的sn-p:dotnetfiddle.net/QB2fTm以上是关于在使用 Newtonsoft 之后,ajax 调用在 asp.net 中返回 HTML 响应而不是 Json的主要内容,如果未能解决你的问题,请参考以下文章
在我无法控制的任何 AJAX 调用之后使用 JQuery 修改 DOM
jQuery - 在 AJAX 调用之后,旧元素仍然存在于 DOM 中吗?如何去除?
调用百度开发者API,程序集AipSdk所使用的Newtonsoft.Json,版本高于所引用的程序集Newtonsoft.Json