CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

AJAX设置DIV的innerhtml的问题

楼主BearRui(孤熊 | 带你去看海!)2006-10-28 09:34:42 在 .NET技术 / ASP.NET 提问

AJAX动态获取邮件的内容并显示到DIV中,一般的都比较正常,现在有个问题。  
   
  当邮件内容是个ASPX页面的内容时就会出错,而且报的"Unknow   Error".  
   
  但是如果把这个邮件内容通过后台.cs中的代码来设置到div的innerhtml就没问题,  
   
  但这样就会刷新页面,是我不想的。  
   
  大家有没有碰见过这样的问题,帮帮忙。 问题点数:200、回复次数:30Top

1 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 09:38:35 得分 0

下面这个是邮件的内容,因为有点大,CSDN有字数限制。所以就上传了下,大家帮忙看看  
  -------------------  
  http://www.cnblogs.com/Files/BearsTaR/1.rarTop

2 楼avisnet(第十维度)回复于 2006-10-28 09:53:16 得分 10

是取不到内容还是取到内容后设置innerHTML时有问题?Top

3 楼ustbwuyi()回复于 2006-10-28 10:00:59 得分 10

你把后台的邮件内容解析成xml然后通过异步回调传到页面,赋给div的innerhtmlTop

4 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 10:02:57 得分 0

To   avisnet(第十维度)   :  
   
  能取到内容,就是在付值的时候出错了Top

5 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 10:03:55 得分 0

to:ustbwuyi()    
   
  你可能没看清楚我的问题!!!Top

6 楼ustbwuyi()回复于 2006-10-28 10:04:51 得分 10

给个例子    
  服务器端:    
  protected   string   FormatMessage(   MessageBox   messages   )  
      {  
          if   (   messages.Messages.Count   ==   0   )   return   "";  
          string   temp   =   "";  
          ArrayList   messageId   =   new   ArrayList();  
          foreach   (   MessageRecord   i   in   messages.Messages   )  
          {  
              temp   +=   "<table   border=\"0\"   cellpadding=\"3\"   cellspacing=\"0\"   width=\"100%\">";  
              temp   +=   "<tr>";  
              temp   +=   "<td   align=\"left\"   width=\"100%\">";  
              if   (   i.ReceiveOrSend   ==   false   )  
                  temp   +=   i.ChatTo   +   "对我说:";  
              else  
                  temp   +=   "我对"   +   i.ChatTo   +   "说:";  
              temp   +=   i.SendTime   +   "   </td>";  
              temp   +=   "</tr>";  
              temp   +=   "<tr>";  
              temp   +=   "<td   width=\"100%\"   align=\"left\"><font   color=\"#C66FFF\">";  
              temp   +=   i.Content   +   "   </font></td>   </tr>   </table>";  
              messageId.Add(   i.ID.ToString()   );  
              MinId   =   i.ID;  
              string[]   dd   =   new   string[5];  
   
             
   
          }  
          return   temp;    
          return   "";  
      }  
   
      public   void   RaiseCallbackEvent(   string   Max   )  
      {  
          MessageManager.UpdateIsRead(   MaxId   );  
      }Top

7 楼ustbwuyi()回复于 2006-10-28 10:05:11 得分 10

客户端:  
    <script   type="text/javascript"   language="javascript">      
      function   <%#this.ClientID%>_CallBack(){          
          <%#   Page.ClientScript.GetCallbackEventReference(   this,   "",   this.ClientID   +   "_GetResult",   "")%>;          
      }  
       
      function   <%#this.ClientID%>_GetResult(result){  
          if(result!="")  
          {  
              document.getElementById("messageSession1").innerHTML+=result;            
                   
          }  
      }          
      i=window.setInterval("<%#this.ClientID%>_CallBack()",1000);      
      </script>Top

8 楼ustbwuyi()回复于 2006-10-28 10:05:57 得分 10

我的意思是从后台取而不刷新页面..Top

9 楼fengyecsdn(幸福的屁颠颠~HOHO 最近事业爱情都顺利!加油)回复于 2006-10-28 10:22:42 得分 10

晕死了       看你的题目真不明白你到底问题是啥  
   
  你是用AJAX直接去读信息了么?  
  我觉得还是   AJAX只负责更新DIV     而DIV的内容靠后台代码解决,别用脚本改DIV的内容  
  只要让AJAX更新DIV这个区域就可以了Top

10 楼ustbwuyi()回复于 2006-10-28 10:34:33 得分 10

楼上的说得很有道理,我的例子就是这样处理的,异步回调负责更新table,内容来自于后台,  
  而脚本更新table的innerHTML,然后用setInterval不断更新....Top

11 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 10:49:31 得分 0

大家看清楚我的问题,我的重点不是AJAX的使用,主要的问题是我要显示的内容,如果是一般的内容就都没问题,比如ustbwuyi()   给的例子中的代码就是一般的内容。  
   
  而当要显示的内容是整1个ASPX页面的内容的时候,就会出错。  
   
  大家可以下载http://www.cnblogs.com/Files/BearsTaR/1.rar  
   
  然后用JS把这个内容显示在DIV里面看看会不会出错。  
  ----------------------------------  
   
  再次声明:问题的重点是要显示的内容很特别。Top

12 楼ustbwuyi()回复于 2006-10-28 10:59:43 得分 10

哦...原来这样,不用试也知道显示在div肯定会有错,相当于把html标签什么的都包到  
  div了,这样的话确实有点郁闷..你传过来的是html源代码吧,如果是这样的话可不可以把它的那些<html><body>这些标签去掉再传过来呢?Top

13 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 12:09:48 得分 0

但是问题是,为什么用后台的.cs代码把它显示在DIV中就一切正常了。  
   
  你可以试试在ASP:BUTTON下click时间下读取内容并付值到DIV的innerhtml中就一切正常了。Top

14 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-28 12:55:11 得分 20

你直接把它拷贝在<div></div>中间也照样不出错误(其实哪是什么不出错误呀,明明是ie对很多错误都直接忽略,以免太技术化吓坏、烦坏一般群众),但是使用脚本命令的innerHTML属性来赋值才出错。Top

15 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-28 13:00:17 得分 10

要注意,虽然在ie上不出错,并不意味着这就符合现在所谓web标准(这是一个web标准上学究的习惯越来越盖过位用户着想的实践者的意见的时代),因此很多浏览器都会出错,甚至ie新版本都可能不允许此类写法。  
   
  尽管不出错,并不意味着内部的东西能够正常显示。最终还是放在服务器端并且用iframe中显示比较正常。Top

16 楼BearRui(孤熊 | 带你去看海!)回复于 2006-10-28 13:07:03 得分 0

用iframe不行啊,我那么多邮件,不可能每个邮件生成1个静态页面啊!!!Top

17 楼stone_soup(夜不打拾)回复于 2006-10-28 13:24:05 得分 0

MarkTop

18 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-28 13:58:29 得分 10

Q:用iframe不行啊,我那么多邮件,不可能每个邮件生成1个静态页面啊!!!  
  ——————————————————————————————————————————  
  A:你可以用一个aspx读取邮件,然后Response.Write其内容。没有要你生成静态页面啊。Top

19 楼ustbwuyi()回复于 2006-10-28 14:35:47 得分 10

我刚开始也想的用iframe,不过后来觉得到时候会有点问题,不过还是可以一试Top

20 楼fengyecsdn(幸福的屁颠颠~HOHO 最近事业爱情都顺利!加油)回复于 2006-10-28 22:27:35 得分 10

sp1234(没有心情,没有心情短语)    
  严重同意你!!!!  
  把ASPX页的内容显示到DIV中这根本就是非常错误的想法!!!  
   
  ASPX输出的内容要用来显示!有以下办法  
  1:让ASPX页输出标准数据,而不是输出HTML页.比如直接写成XML或者自己定义的数据流.(有些站点的防图片盗连就是这样,让一个ASPX页根据参数输出图片字节流)  
  2:你自己去分析ASPX页的HTML代码,去除标记语言,自己抓出数据!  
  3:动态WINDOW,或者MOD窗口,嵌入试IFRAME等等办法.  
   
  其实最好的多站多页面数据整合还是RSS\XML或者是WEBSERVCES  
  Top

21 楼yougucao379548695(郑州-小刘)回复于 2006-10-29 19:26:13 得分 0

呵呵,帮顶!Top

22 楼zlopen(MadeInChina)回复于 2006-10-30 09:38:00 得分 10

在页面赋值前,把innerhtml的冲突内容进行转义即可  
  如“<”替换为“&lt;”,“>”替换为“l&gt;”Top

23 楼ls212(鲁四)回复于 2006-10-30 12:07:49 得分 0

学习!~~~~Top

24 楼sh_city(潜水的鱼)回复于 2006-10-30 14:32:41 得分 10

请将要输出的内容按下面的格式  
  <![CDATA[   "这里放您的内容"   ]]>Top

25 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-10-30 14:38:06 得分 10

Q:   在页面赋值前,把innerhtml的冲突内容进行转义即可  
   
   
  请将要输出的内容按下面的格式  
  <![CDATA[   "这里放您的内容"   ]]>  
  ————————————————————————————————————————————  
  A:   难道要显示html源代码?  
   
  不是的,是要显示网页经过浏览器解释后的ui界面。Top

26 楼Csharp110(~泰山~)回复于 2006-10-30 14:54:43 得分 0

学习了!只能帮你顶!Top

27 楼JennyGreator()回复于 2006-10-31 09:05:58 得分 10

AJAX本来就是前台的东西,如果要用后台去更新还用AJAX干吗。Top

28 楼jacky_20001(阿瑞)回复于 2006-10-31 09:24:20 得分 10

aspx里面有大量重要的html代码    
  所以放在div肯定会出错    
  把一些关键的html代码去掉   可能可以正常显示Top

29 楼min_1982(我顶我顶我顶顶顶)回复于 2006-10-31 09:31:20 得分 0

路过学习Top

30 楼yiyioo(天一(一个人的Team))回复于 2006-10-31 09:33:12 得分 10

没下楼主的代码  
  不过,这种情况应该是回车换行,双引号之类的导致的,  
   
  在asp里我碰到过,先在服务端把chr(13)&chr(10)替换成<br/>,然后把双引号替换成一个'(这个要看具体情况)  
  在.net里,应该是把\n\r替换成<br/>,楼主可以尝试一下.Top

相关问题

关键词

得分解答快速导航

  • 帖主:BearRui
  • avisnet
  • ustbwuyi
  • ustbwuyi
  • ustbwuyi
  • ustbwuyi
  • fengyecsdn
  • ustbwuyi
  • ustbwuyi
  • sp1234
  • sp1234
  • sp1234
  • ustbwuyi
  • fengyecsdn
  • zlopen
  • sh_city
  • sp1234
  • JennyGreator
  • jacky_20001
  • yiyioo

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo