前台用的的DataGrid来显示数据,后台用ashx来处理返回数据(JSON格式),返回一般的数据还没什么问题,但是在返回复杂数据例如HTMl代码的时候,就很容易出问题了,现在我随便从网上复制了一部分html代码存到数据库,然后在返回给前台的时候,直接浏览ashx页面数据没有任何问题,但是DataGrid就是不显示数据,在百度了很久后还是没有搞明白,最后在搞人的指点下终于明白了这是为什么,就是换行符影响的,参见http://www.cnblogs.com/springfield/archive/2010/05/24/1724383.html,明确说了在构造json数据的时候不能有换行符,然后我就一直想把换行符给替换了,其实不是不能有换行符,只要转义一样就可以了,例如
var a="'asdas':5345345
3423424"; //这种会出错
var b="'asdsad':345345\
123131"; //转义掉换行符,就不会出错
知道了原理后就好办多了,在后台网前台输出json之前,先对数据做下处理工作:
public static string cleanString(string newStr)
{
string tempStr = newStr.Replace("\r\n", "\\\r\n");//转义换行符
newStr = newStr.Replace("\"", "'"); //替换双引号为单引号
return tempStr;
}
处理之后的json数据在每次换行的地方都加了一个转义符\,这样当转行为js对象的时候就不会出错了
DataGrid显示正常