我已经知道可以通过Response.Write("<iframe id='frmDiagram' runat='server'></iframe>");
但是这样写出来的iframe不能在服务器端这样赋值
 frmDiagram.InnerHtml="...(一个网页html代码)";-----------------------------------------------------------
那么不通过在客户端写代码,只通过服务器端如何创建一个iframe,并且赋给它一些属性?
---------------------------------------------------------------
或者能给
Response.Write("<iframe id='frmDiagram' runat='server'></iframe>");
这样写出来的控件在服务器端赋值也可以
 frmDiagram.InnerHtml="...(一个网页html代码)";
请高手指教,多谢

解决方案 »

  1.   

    千万不要告诉我用javascript,因为我要将一个网页的html代码写进iframe中,如果用
    documeng.write('<html>....</html>');
    因为一个网页的html代码中包含很多特殊字符,最后javascript根本执行不了,网页上面绘出现乱码
    ,我希望在服务器端解决,谢谢
      

  2.   

    因为我要将得到的html代码放在一个iframe里,这段html代码实现的网页要有提交功能,所有必须用iframe,不能用span
      

  3.   

    page中
    <iframe src=<% =str %/>code:
    public string str
      

  4.   

    谢谢大象,可是我是在自定义控件中进行这些行为
    没有page,只有code,通过output.Write("<iframe></iframe>");
      

  5.   

    this.Lable1.Text="<iframe id=\"frmDiagram\" name=\"frmDiagram\" src=\"xxx.aspx\" scrolling=\"no\" frameBorder=\"0\" width=\"100%\" height=\"60\"></iframe>";
      

  6.   

    楼上的方法很好,我能够成功设置src,
    但是现在我需要将取回的一个网页的html代码写入到iframe中
    也就是类似于
    iframe.InnerHtml="<html>....其它html代码...</html>";]
    该怎么样将服务器端取得的html代码写入到客户端的iframe中,而不是直接赋一个src不要告诉我用javascript,因为已经证明行不通
    具体可以参见
    http://community.csdn.net/Expert/topic/4061/4061861.xml?temp=.6085474那么怎样在服务器端通过控制iframe来实现那?
    请指教,谢谢
      

  7.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=EA6842AD-9FA7-4865-BCDD-60CA539BE7DD
      

  8.   

    谢谢孟子,但是你说的那种方法里面用到了javascript,可是我无法通过javascript给
    iFraem.InnerHtml赋值,因为我要赋的值是html,里面包含很多特殊字符和javascript代码,用javascript就会出现乱码,具体描述如下:
    ------------------------------------------------
    原来在页面上注册的javascript函数如下:
    <script language='javascript'>  
            <!--                                        
     function OpenModelOpenAndWriteContent(content,target,para)  
            {                                        
                    var win;                                        
            win = window.open( 'about:blank','','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');          
            win.document.write(content);          
             }                                       
             //-->                                      
        </script> 调用这个函数后页面的效果如下:<script language='javascript'>OpenModelOpenAndWriteContent("<script language='javascript'>          
               function SetApplyDate() //设置当前日期            
               {             
               var now = new Date();          
               var year = now.getYear();          
               var month = now.getMonth()+1;          
               var day = now.getDate();          
               Form1.txtApplyTime.value = year+'-'+month+'-'+day;            
               }            
               </script>          
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>填写请假单</title>
    <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <base target="_self">
    <script language="javascript" id="clientEventHandlersJS">
    function window_onload() 
    {
    //Close the browser window
    if ('' == 'true') 
    {
    window.close();
    }
    }</script>
    </HEAD>
    <body onload="return window_onload()" bgColor="#c0d8f8">
    <FONT face="宋体">
    <form name="Form1" method="post" action="Request.aspx" id="Form1" enctype="multipart/form-data">
    <input type="hidden" name="__VIEWSTATE" value="dDwxMDUxNDM3ODAwO3Q8cDxsPFBsYW5TZXJ2ZXI7U2VyaWFsTm87WE1MRG9jdW1lbnQ7Q2xvc2VQYWdlO0FsbG9jYXRlO1hNTERvY0luZGV4Oz47bDxmYW5naHVpO1xlO2w8PjtvPGY+O288dD47bDw+Oz4+O2w8aTwwPjs+O2w8dDw7bDxpPDM+O2k8OD47aTwxMz47aTwxOD47aTwyMj47aTwzMz47aTw0Mz47aTw0Nj47aTw0OT47aTw1OD47aTw2ND47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8dDw7O2w8aTwwPjs+Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7RW5hYmxlZDs+O2w8MDowMDowMDtvPGY+Oz4+Oz47Oz47Pj47Pj47PsGwZL89+EMsD/sAs2iDvUFSswzI" /><FONT face="宋体"><FONT face="宋体"></FONT>&nbsp;
    <TABLE id="Table1" cellPadding="1" width="500" align="center" border="0" cellSpacing="1">
    <TBODY>
    <TR>
    <TD align="center" colSpan="2"><b><u>请假单</u></b></TD>
    </TR>
    <TR>
    <TD></TD>
    <TD width="300"></TD>
    </TR>
    <TR>
    <TD><span id="Label6">部门:</span></TD>
    <TD width="300"><input name="txtDepartment" type="text" id="txtDepartment" tabindex="1" /><span id="RequiredFieldValidator1"><font color="Red">*</font></span></TD>
    </TR>
    <TR>
    <TD><span id="Label7">职位:</span></TD>
    <TD width="300"><input name="txtPosition" type="text" id="txtPosition" tabindex="1" /><span id="RequiredFieldValidator2"><font color="Red">*</font></span></TD>
    </TR>
    <TR>
    <TD><span id="Label1">姓名:</span></TD>
    <TD width="300"><input name="txtName" type="text" id="txtName" tabindex="1" /><span id="RequiredFieldValidator3"><font color="Red">*</font></span></TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 13px"><span id="Label4">请假类型:</span></TD>
    <TD style="HEIGHT: 13px"><select name="K2DropDownList1" id="K2DropDownList1">
    <option selected="selected" value="事假">事假</option>
    <option value="病假">病假</option>
    <option value="婚假">婚假</option>
    <option value="丧假">丧假</option>
    <option value="产假">产假</option>
    <option value="工伤假">工伤假</option>
    <option value="晚婚">晚婚</option>
    <option value="年假">年假</option></select></TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 19px" vAlign="top">
    <span id="Label2" name="startdatevalue">开始时间:</span>
    </TD>
    <TD style="HEIGHT: 19px" vAlign="top">
    <input name="txtStartTime" type="text" id="txtStartTime" tabindex="1" />
    <input type="submit" name="btnStartDate" value="请选择" id="btnStartDate" /><span id="RequiredFieldValidator4"><font color="Red">*</font></span>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 19px" vAlign="top"><span id="Label3">结束时间:</span></TD>
    <TD vAlign="top">
    <input name="txtEndTime" type="text" id="txtEndTime" tabindex="1" />
    <input type="submit" name="btnEndDate" value="请选择" id="btnEndDate" /><span id="RequiredFieldValidator5"><font color="Red">*</font></span>&nbsp;</TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 26px"><span id="Label8">请假期间:</span></TD>
    <TD style="HEIGHT: 26px"><input name="txtLeaveDays" type="text" value="0" id="txtLeaveDays" tabindex="1" />&nbsp;<span id="Label10">天</span><input name="txtLeaveHours" type="text" value="0" id="txtLeaveHours" tabindex="1" />&nbsp;<span id="Label11">小时</span><input name="txtLeaveMinutes" type="text" value="0" id="txtLeaveMinutes" tabindex="1" />&nbsp;<span id="Label12">分钟</span>&nbsp;&nbsp;&nbsp;</TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 26px"><FONT face="宋体"><span id="Label5">Email:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>
    </TD>
    <TD style="HEIGHT: 26px"><input name="txtEmail" type="text" id="txtEmail" tabindex="5" /><span id="RequiredFieldValidator7"><font color="Red">*</font></span>&nbsp;
    </FONT></TD></TR>
    <TR>
    <TD style="HEIGHT: 26px"><span id="Label9">申请日期</span></TD>
    <TD style="HEIGHT: 26px"><input name="txtApplyTime" type="text" value="0:00:00" readonly="readonly" id="txtApplyTime" disabled="disabled" tabindex="5" /></TD>
    </TR>
    <TR>
    <TD align="center" colSpan="2">
    <P>&nbsp;</P>
    <P>
    <input type="submit" name="K2Button1" value="确定" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="K2Button1" tabindex="6" /></P>
    </TD>
    </TR>
    </TBODY></TABLE> </FONT><script language='javascript'>          
               SetApplyDate();          
               </script>          
     </form></FONT>
    </body>
    </HTML>
    ",'_blank','');</script>并且页面有javascript错误提示
    -----------------------------------------具体见
    http://community.csdn.net/Expert/topic/4061/4061861.xml?temp=.6085474请指教,谢谢
      

  9.   

    为什么不一次拼完整呢,"<iframe><html>...</html></iframe>"
      

  10.   

    我用楼上的方法一次拼全没有报错,
    在<iframe></iframe>中间也有一个网页的html代码,可是在客户端的网页上面iframe上面是空白,
    客户端察看源代码如下:
    ------------------------------------------------------------------------<span><iframe height='500' width='500'> <script language='javascript'>          
                function SetApplyDate() //设置当前日期            
                {             
                var now = new Date();          
                var year = now.getYear();          
                var month = now.getMonth()+1;          
                var day = now.getDate();          
                Form1.txtApplyTime.value = year+'-'+month+'-'+day;            
                }            
                </script>          
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>填写请假单</title>
    <meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
    <meta content="C#" name="CODE_LANGUAGE">
    <meta content="JavaScript" name="vs_defaultClientScript">
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    <base target="_self">
    <script language="javascript" id="clientEventHandlersJS">
    function window_onload() 
    {
    //Close the browser window
    if ('' == 'true') 
    {
    window.close();
    }
    }

    </script>
    </HEAD>
    <body onload="return window_onload()" bgColor="#c0d8f8">
    <FONT face="宋体">
    <form name="Form1" method="post" action="Request.aspx" id="Form1" enctype="multipart/form-data">
    <input type="hidden" name="__VIEWSTATE" value="dDwxMDUxNDM3ODAwO3Q8cDxsPFBsYW5TZXJ2ZXI7U2VyaWFsTm87WE1MRG9jdW1lbnQ7Q2xvc2VQYWdlO0FsbG9jYXRlO1hNTERvY0luZGV4Oz47bDxmYW5naHVpO1xlO2w8PjtvPGY+O288dD47bDw+Oz4+O2w8aTwwPjs+O2w8dDw7bDxpPDM+O2k8OD47aTwxMz47aTwxOD47aTwyMj47aTwzMz47aTw0Mz47aTw0Nj47aTw0OT47aTw1OD47aTw2ND47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8dDw7O2w8aTwwPjs+Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7RW5hYmxlZDs+O2w8MDowMDowMDtvPGY+Oz4+Oz47Oz47Pj47Pj47PsGwZL89+EMsD/sAs2iDvUFSswzI" /> <FONT face="宋体"><FONT face="宋体"></FONT>&nbsp;
    <TABLE id="Table1" cellPadding="1" width="500" align="center" border="0" cellSpacing="1">
    <TBODY>
    <TR>
    <TD align="center" colSpan="2"><b><u>请假单</u></b></TD>
    </TR>
    <TR>
    <TD></TD>
    <TD width="300"></TD>
    </TR>
    <TR>
    <TD><span id="Label6">部门:</span></TD>
    <TD width="300"><input name="txtDepartment" type="text" id="txtDepartment" tabindex="1" /><span id="RequiredFieldValidator1"><font color="Red">*</font></span></TD>
    </TR>
    <TR>
    <TD><span id="Label7">职位:</span></TD>
    <TD width="300"><input name="txtPosition" type="text" id="txtPosition" tabindex="1" /><span id="RequiredFieldValidator2"><font color="Red">*</font></span></TD>
    </TR>
    <TR>
    <TD><span id="Label1">姓名:</span></TD>
    <TD width="300"><input name="txtName" type="text" id="txtName" tabindex="1" /><span id="RequiredFieldValidator3"><font color="Red">*</font></span></TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 13px"><span id="Label4">请假类型:</span></TD>
    <TD style="HEIGHT: 13px"><select name="K2DropDownList1" id="K2DropDownList1">
    <option selected="selected" value="事假">事假</option>
    <option value="病假">病假</option>
    <option value="婚假">婚假</option>
    <option value="丧假">丧假</option>
    <option value="产假">产假</option>
    <option value="工伤假">工伤假</option>
    <option value="晚婚">晚婚</option>
    <option value="年假">年假</option></select></TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 19px" vAlign="top">
    <span id="Label2" name="startdatevalue">开始时间:</span>
    </TD>
    <TD style="HEIGHT: 19px" vAlign="top">
    <input name="txtStartTime" type="text" id="txtStartTime" tabindex="1" />
    <input type="submit" name="btnStartDate" value="请选择" id="btnStartDate" /><span id="RequiredFieldValidator4"><font color="Red">*</font></span>
    &nbsp;

    </TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 19px" vAlign="top"><span id="Label3">结束时间:</span></TD>
    <TD vAlign="top">
    <input name="txtEndTime" type="text" id="txtEndTime" tabindex="1" />
    <input type="submit" name="btnEndDate" value="请选择" id="btnEndDate" /><span id="RequiredFieldValidator5"><font color="Red">*</font></span>&nbsp;

    </TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 26px"><span id="Label8">请假期间:</span></TD>
    <TD style="HEIGHT: 26px"><input name="txtLeaveDays" type="text" value="0" id="txtLeaveDays" tabindex="1" />&nbsp;<span id="Label10">天</span><input name="txtLeaveHours" type="text" value="0" id="txtLeaveHours" tabindex="1" />&nbsp;<span id="Label11">小时</span><input name="txtLeaveMinutes" type="text" value="0" id="txtLeaveMinutes" tabindex="1" />&nbsp;<span id="Label12">分钟</span>&nbsp;&nbsp;&nbsp;</TD>
    </TR>
    <TR>
    <TD style="HEIGHT: 26px"><FONT face="宋体"><span id="Label5">Email:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT>
    </TD>
    <TD style="HEIGHT: 26px"><input name="txtEmail" type="text" id="txtEmail" tabindex="5" /><span id="RequiredFieldValidator7"><font color="Red">*</font></span>&nbsp;
    </FONT></TD></TR>
    <TR>
    <TD style="HEIGHT: 26px"><span id="Label9">申请日期</span></TD>
    <TD style="HEIGHT: 26px"><input name="txtApplyTime" type="text" value="0:00:00" readonly="readonly" id="txtApplyTime" disabled="disabled" tabindex="5" /></TD>
    </TR>
    <TR>
    <TD align="center" colSpan="2">
    <P>&nbsp;</P>
    <P>
    <input type="submit" name="K2Button1" value="确定" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="K2Button1" tabindex="6" /></P>
    </TD>
    </TR>
    </TBODY></TABLE> </FONT> <script language='javascript'>          
                SetApplyDate();          
                </script>          
     </form></FONT>
    </body>
    </HTML>
    </iframe></span>-------------------------------------------------
    为什么是空白的那?
    如何才能让iframe中的网页显示出来?
    还是这样将html代码放在iframe标志中间就是错误的
    请指教
      

  11.   

    iframe接受文件还行,接受html就不好说了替楼主顶!
      

  12.   

    iframe有这样的用法吗?iframe只能用src嵌入另一个网页。
      

  13.   

    难道孟子的也解决不了你的问题吗?
    ----------------------------------------------
    孟子的方法是用javascript,用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
      

  14.   

    <iframe name="I1" src="" target="contents"></iframe></p>
    <script>
    I1.document.createDocumentFragment.body;
    I1.document.write('<script>alert(\'x\')<\/script>');
    </script>
      

  15.   

    楼上的方法不行啊
    因为用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
      

  16.   

    特殊符号我上面的例子已经给出处理办法了。js不行的话asp.net也不行。因为这根本不关服务器端的事情。
      

  17.   

    不知道这个是不是你要的
    aspx<form id="Form1" method="post" runat="server">
    <iframe src="http://www.sohu.com" width="200" height="100" id="IFRAME1" runat="server">
    </form>
    cs
    protected System.Web.UI.HtmlControls.HtmlGenericControl IFRAME1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页
    this.IFRAME1.Attributes["src"] = "http://www.caae.com.cn";

    }
      

  18.   

    to 楼上:
    ---------------------------
    首先谢谢你的回复:
    但是我要的是要在服务器端将html代码赋给iframe,
    而且我的代码是在自定义控件中,没有page,只有code.
    我的代码原理是模拟身份验证,用一个模拟的身份给服务器发送请求以后,
    服务器返回这个网页的html代码:
    相关代码如下:----------------------------
    string url ;
    string respstr;

    url = "http://www.baidu.com";
    respstr = "";WebRequest myWebRequest=WebRequest.Create(url);
    myWebRequest.PreAuthenticate=true;
    NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
    myWebRequest.Credentials=networkCredential;
     
         WebResponse myWebResponse=myWebRequest.GetResponse();     Stream stream = myWebResponse.GetResponseStream();
         StreamReader sr = new StreamReader(stream);
         //以字符串形式读取数据流
         respstr = sr.ReadToEnd();
        sr.Close(); --------------------------
    这里的respstr就是得到的html代码。
    下一步我想将这段html代码放在iframe中,
    有人可能问为什么放在iframe中那?
    因为这段html代码得到的网页要完成提交功能,
    所以它必须作为一个单独的网页运行
    ---------------------------------------
      

  19.   

    我没太看明白你的意思,你可以这样
    protected System.Web.UI.HtmlControls.HtmlGenericControl IFRAME1 = new HtmlGenericcontrol("IFRAME");
    IFRAME1.Attribuates["src"] = 
    this.Controls.Add( IFRAME1 );
      

  20.   

    to 楼上:
    这样倒是可以,但是因为要添加为"src"属性的网页是基于windows验证的,在执行页面的时候会弹出用户名和密码提示,现在我的目的是屏蔽掉用户名和密码提示,所以就要模拟windows身份,用的是下面的代码:
    ----------------------------
    string url ;
    string respstr;

    url = "http://../.../request.aspx";  //一个基于windows验证的网页
    respstr = "";WebRequest myWebRequest=WebRequest.Create(url);
    myWebRequest.PreAuthenticate=true;
    NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
    myWebRequest.Credentials=networkCredential;
     
         WebResponse myWebResponse=myWebRequest.GetResponse();     Stream stream = myWebResponse.GetResponseStream();
         StreamReader sr = new StreamReader(stream);
         //以字符串形式读取数据流
         respstr = sr.ReadToEnd();
        sr.Close(); --------------------------
      

  21.   

    现在的问题是如何将这段html写入到iframe中,请指教,谢谢
      

  22.   

    何必死钻牛角尖呢?写html入iframe没有任何作用,你写个只有一个iframe元素的htm文件在浏览器上运行一下就知道了。为何不去想想其它设计思路?
      

  23.   

    我在另一回贴:http://community.csdn.net/Expert/topic/4061/4061358.xml?temp=.6996118
      

  24.   

    to sp1234,
    我看了你的回贴,分析的很好,
    可是即使我用用户控件还是回避不了这个问题我怎么样将回传回来的html代码呈现在页面上,
    这段html代码要具有单独一个网页的功能,
    能够完成提交功能,
    而且不与父页面上的功能冲突用用户控件还是一样请指教
      

  25.   

    其实现在的问题是已经知道用户名和密码的情况下,如何在访问基于windows验证的网页的时候不让它弹出用户名和密码而自动登录,现在我已经完成的就是下面的代码:----------------------------
    string url ;
    string respstr;

    url = "http://../.../request.aspx";  //一个基于windows验证的网页
    respstr = "";WebRequest myWebRequest=WebRequest.Create(url);
    myWebRequest.PreAuthenticate=true;
    NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
    myWebRequest.Credentials=networkCredential;
     
         WebResponse myWebResponse=myWebRequest.GetResponse();     Stream stream = myWebResponse.GetResponseStream();
         StreamReader sr = new StreamReader(stream);
         //以字符串形式读取数据流
         respstr = sr.ReadToEnd();
        sr.Close(); --------------------------现在是如何把它写入iframe中。---------------------------
    除了这种方法以外,我还试验过在客户端用xmlHttp.Post的方法,这种方法访问我自己机器上的网页没有问题,但是如果在其他机器上,就提示“没有权限”,也就是说在其他机器上即使用用户名和密码进行post,也还是没有权限,可能是因为windows对这种客户端方式的post权限进行了限制。---------------------------------------
    我也想过在服务器端验证以后,在服务器端打开网页,但是服务器端除了用Response.write("<script>window.open('...');</script>")和Page.RegisterStartUpScript("<script>window.open('...');</script>");以外,还有一个超链接,但是这样的打开方式即使在服务器端进行了身份模拟,还是会弹出用户名和密码的提示,不知道有没有其他方式的服务器端打开链接的方法可以将验证信息带进去?
      

  26.   

    当然,当嵌入的html内容没有变化的时候,复用上次的ascx文件而不复写文件可以有更好的性能。读入不同文件名的ascx当然是用 page 对象的loadcontrol方法,然后放入页面里(例如放入一个placeHolder控件里)。变量当然不会有冲突。asp.net对控件的命名机制(ID属性,UniqueID属性,ClientID属性,INamingCintainer接口)会自动起作用的。
      

  27.   

    动态装入不同功能的ascx的作用远远不只“共享验证机制”,只是个副作用。真正的作用是一个操作表单的引擎,例如一个播放器的调节按钮部分需要用户自己选择风格,这就需要动态装入不同的控件。而 ascx控件也是一种控件,并且可以动态生成和编译。
      

  28.   

    在ie中提示没有权限因为ie sp1 的缘故,你需要下载个ms补丁
    http://support.microsoft.com/default.aspx?kbid=832414
      

  29.   

    to 楼上:
    首先谢谢你的回复,但是还是不能奏效,具体描述如下:
    ---------------------------------------------------------
    你给出的链接我看了,里面有这样的描述:
    ---------------------------------------
    当您使用下列格式进行 XMLHTTP 调用时:Xmlhttp.open("GET",
    "http://someone:[email protected]/default.asp",
     false, "", "");Xmlhttp.open("GET",
    "http://someone:[email protected]/default.asp",
     false, "someone", "passwd");Xmlhttp.open("GET",
     "http://www.northwindtraders.com/default.asp",
      false, "someone", "mypass");调用失败,您收到以下错误信息: 
    Invalid Syntax Error
    而下面的调用却能够成功:Xmlhttp.open("GET", "http://www.northwindtraders.com/default.asp", false, "", "");
    ------------------------------------------
    你的这篇文章也给出了这种情况的解决办法,就是安装一个修复程序,
    我安装了这个修复程序,还是提示没有权限,可能是因为我现在出现的
    情况不是这篇文章里面描述的情况,现在我的情况是:
    --------------------------------------
    我用下列的javascript代码进行模拟身份post操作:
    --------------------------------------------------
                  var sUserName = getCookie('FGUserName');          
                    var sPassword = getCookie('FGUserPassword');          
                    var sDomain = getCookie('FGUserDomain');          
                    if ( sUserName == null )         
                    {         
                        sUserName = '';         
                    }         
                    if ( sPassword == null )         
                    {         
                        sPassword = '';         
                    }         
                    if ( sDomain = null )         
                    {         
                        sDomain == '';         
                    }         
            
                   if ( sUserName != '' )          
                   {          
                  var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP');          
                  xmlHttp.open('GET' , url , false , sUserName , sPassword );          
                  //xmlHttp.open('GET' , url , true , sUserName , sPassword );          
                  xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );          
                  xmlHttp.Send();          
                                                                         
                  if( xmlHttp.status == '200' )    <--执行到这里时,   xmlHttp.status 的值是401,表示没有权限   
                  {          
                 window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');          
                   location.reload();          
                  }          
               }              
     -----------------------------------------
    注意上面代码中箭头的位置,xmlHttp.status 的值是401,表示没有权限 ,我安装了补丁还是这样
    -----------------------------------------
    看来楼上的给出的方法跟我的问题有点差异,但是非常感谢,还请各位继续指教,感激涕零
      

  30.   

    看来还需要用刚开始的方法,在服务器端用模拟post得到html代码,然后写入iframe中或者用户控件,但是该怎样写入iframe或者用户控件中哪?请高手指教,谢谢
      

  31.   

    走进迷宫了,绕出来你会发现没有任何进展。你已开始就是问怎样嵌入iframe,没有问怎样获得html。现在还是原来问题一点没变。你把获得的html先写入一个文本文件总能做到吧,上面为什么必须让iframe.innerHTML显示内容呢?所有结束符的html元素都可以有innerHTML属性,还可以有更灵活的脚本代码可以决定是在起始符之后还是在结束符之前插入代码或者文本。但是关键是iframe根本不对插入其内的html作处理。你怎么又回到“写入iframe”的老路上去了呢?!
      

  32.   

    to 楼上:1 .上面为什么必须让iframe.innerHTML显示内容呢?所有结束符的html元素都可以有innerHTML属性
    -----------------------------------------------可是得到的html代码要能执行提交功能,所以不能与页面上的其他代码混淆,必须是一个独立的页面,除了iframe好像没有其他的控件了吧
    ----------------------------------------------------2.把获得的html先写入一个文本文件总能做到吧
    --------------------------------------
    我的代码都是放在用户控件中,由浏览器执行,所以没有操作文件的权限,
    另外不光要将html代码写进去,而且还要将用户验证信息写进去
    这样来说,即使用用户控件也不能避免使用iframe,请楼上想想还有什么其他好的方法,我已经绞尽脑汁了
    谢谢
      

  33.   

    你用msxml4.0试试,我是用过的
      

  34.   

    to 楼上:
    我用来msxml4.0,结果还是提示说没有权限:
    相关的javascript代码如下:
    __________________________________              var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.4.0');          
                  xmlHttp.open('GET' , url , false , sUserName , sPassword );          
                  //xmlHttp.open('GET' , url , true , sUserName , sPassword );          
                  xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );          
                  xmlHttp.Send();          
                  alert( xmlHttp.status);      
    ------------------------------------------------------------------
    在我本机上用域用户登录打开我机器上的网页弹出的xmlHttp.status的值是200(表示成功),
    但是在别的机器上用域用户登录post我机器上的网页弹出的xmlHttp.status的值是401(表示没有权限),
    是不是可以设置我机器上的iis,让其他机器上的用户可以用xmlHttp访问我机器上的网页。
    这里要说明两点:
    1. 我机器暂时作为服务器,我机器上的网页都是基于windows验证的,因为项目的原因,必须用windows验证
    2. 所有访问我机器的用户都是一个域里面的域用户但是我不知道该如何设置权限,才能让其他机器上的用户用域用户登录可以用xmlHttp访问我机器上的网页,请指教,谢谢!
      

  35.   

    还有一点就是下面这句话:
         xmlHttp.open('GET' , url , false , sUserName , sPassword );          
    里面没有域的信息,不知道该怎么样加入域的信息,我用了下面的代码:
        xmlHttp.open('GET' , url , false , 'domainname\'+sUserName , sPassword );   
    结果连在我机器上访问都提示没有权限,看来不行
    不知道怎么样加入域的信息,请指教:)
      

  36.   

    我告诉你iframe元素能运行innerHTML,但是没有任何作用。我也告诉了你我认为最简单的方法。奇怪的是你好像从来没有试过。反而要去试一看就知道不行的方法。你要嵌入的html事后台代码,而通过http协议得到的回应与浏览器一样是输出到客户端的代码,怎么可能作为后台的组程部分?问题是你没有从原理上去解决问题,一遍遍“试错”,这样的学习方法太累了。
      

  37.   

    to sp1234:
     谢谢你的热心帮助,可能是我没有把问题说清楚,我现在整理一下思路:
    -----------------------------------------------------------------
    前提条件:
    (a). 我写的是一个web part,也就是一个自定义控件,运行在一个网站上。
    (b).当我们在访问一个基于windows验证的网页的时候,会弹出用户名和密码的提示,要求用户输入,现在我不想让用户输入用户名和密码,而是由这个控件中其他功能模块中记录的用户名和密码来模拟windows登录来访问这个网页。(c).为了实现这个目的,我采用了两种途径,只要有一种途径能成功就行,但是现在这两种途径都有点问题,这也是我有时谈论iframe,有时讨论xmlHttp的原因。
    -----------------------------------------------------------------------
    这两种途径分别是:
    ------------------------------------------------------------------------
    *******************************************************
    第一种方法.客户端用javascript函数来实现,下面是我写的一个javascript函数的一部分:
    --------------------------------------------
    <script language='javascript'>   
    <!--                                        
    function OpenWindowWithUserInfo(url)  
    {                                        
      var sUserName = getCookie('FGUserName');          
      var sPassword = getCookie('FGUserPassword');          
      var sDomain = getCookie('FGUserDomain');          
      if ( sUserName == null )         
      {         
      sUserName = '';         
      }         
      if ( sPassword == null )         
      {         
      sPassword = '';         
      }         
      if ( sDomain = null )         
      {         
      sDomain == '';         
      }         
      window.status='正在进行身份验证,可能需要几秒钟的时间,请耐心等待...'         
     if ( sUserName != '' )          
     {          
    var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.4.0');          
    xmlHttp.open('GET' , url , false , sUserName , sPassword );          
    xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );          
    xmlHttp.Send();          
    alert( sUserName );                
    alert( xmlHttp.status);                                             
    if( xmlHttp.status == '200' )          
    {          
     window.status=''         
       window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');          
     location.reload();          
    }          
     }              
      window.status=''         
    }                                       
    //-->                                      
       </script>  
    -------------------------------------------------
    这段javascript代码注册在客户端,然后调用这个函数,传入一个url,这个url就是基于windows验证的网页,注意下面这句话:
    if( xmlHttp.status == '200' )          
    {          
     window.status=''         
       window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');          
     location.reload();          
    }  也就是说,如果xmlHttp.status 等于 200的话,证明模拟windows登录成功,就直接打开这个网页,不用再另外回传html代码。
    ----------------------------- 
        这种方法在基于windows验证的网页所在的服务器上执行成功,打开的网页也具有了javascript代码中的用户身份。
        但是在服务器以外的其他机器上就执行不成功,xmlHttp.status 的值是401(没有权限)
        我试了MSXML2.XMLHTTP.4.0和MSXML2.XMLHTTP都不行,我也安装了微软的补丁http://support.microsoft.com/default.aspx?kbid=832414
        但是我不知道该如何设置权限,才能让其他机器上的用户用域用户登录可以用xmlHttp访问基于windows验证的网页。-----------------------------------
    ***********************************
    第二种方法:在服务器端用用户名和密码模拟用户的身份去访问基于windows验证的网页,
     经过测试发现可以得到这个网页的html代码,现在的问题是如何将这段html代码显示在网页上,
     这段代码组成的页面需要具有独立网页的功能,能够提交,而且不能与父页面冲突,所以我想到了iframe,因为除此之外没有其他的控件具有这样的包容能力,即使用用户控件,也不能避免使用iframe
    --------------------------------------
    但是如何将html代码写入iframe是个问题,因为用document.write来写页面上会出现乱码(我在上面的帖子中已经给出了好几遍例子)
    ------------------------------------------------------------------
    以上就是我的两种途径,任何一种好用都可以,还请多多指教:)
      

  38.   

    首先纠正一个错误:要用innerHtml,并不是frmDiagram.InnerHtml这样的。应该是frmDiagram.document.body.innerHtml。然后,有几个问题问楼主:1.楼主说第二种方法:在服务器端用用户名和密码模拟用户的身份去访问基于windows验证的网页,
     经过测试发现可以得到这个网页的html代码,现在的问题是如何将这段html代码显示在网页上,
     这段代码组成的页面需要具有独立网页的功能,能够提交,而且不能与父页面冲突,所以我想到了iframe,因为除此之外没有其他的控件具有这样的包容能力,即使用用户控件,也不能避免使用iframe
    ---------------------------------
    问:这段html代码存放在哪里?2.楼主说孟子的方法是用javascript,用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
    ----------------------------------
    问:除了特殊符号和javascript代码,还有什么特殊的东西没?另回答楼主的一个问题:我用楼上的方法一次拼全没有报错,
    在<iframe></iframe>中间也有一个网页的html代码,可是在客户端的网页上面iframe上面是空白,
    为什么是空白的那?
    如何才能让iframe中的网页显示出来?
    还是这样将html代码放在iframe标志中间就是错误的
    请指教
    ----------------------------------------------------------
    答:用直接修改iframe.document内容的方法(不管是innerHTML还是write方法),只要让document中包含了<script>标签,iframe就显示为空白。而用src="某网址"的方法,iframe.document的内容就可以包含<script>标签。
    楼主请回答我的两个问题,那么我觉得能解决楼主的问题。
      

  39.   

    谢谢楼上的热心,下面是我对楼上问题的回答:1.楼主说第二种方法:在服务器端用用户名和密码模拟用户的身份去访问基于windows验证的网页,
     经过测试发现可以得到这个网页的html代码,现在的问题是如何将这段html代码显示在网页上,
     这段代码组成的页面需要具有独立网页的功能,能够提交,而且不能与父页面冲突,所以我想到了iframe,因为除此之外没有其他的控件具有这样的包容能力,即使用用户控件,也不能避免使用iframe
    ---------------------------------
    问:这段html代码存放在哪里?-------------------------------------------------------
    这段代码是通过服务器端获取的,在服务器端存在一个字符串中,这里有两种处理方法:
    (1)直接在服务器端调用iframe.InnerHtml,但是显示为空白
    (2)调用客户端的javascript脚本,打开一个空白页(about:blank),然后用document.write("html代码")写进去,但是由于html代码中有特殊符号和javascript代码,所以导致了页面的乱码,而不能正确地执行函数的功能,反而出现了javascript函数,具体的页面乱码我上面已经粘贴过好几次了****************************************************************************
    2.楼主说孟子的方法是用javascript,用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
    ----------------------------------
    问:除了特殊符号和javascript代码,还有什么特殊的东西没?-----------------------------------------
    没有什么其他的东西了,其实就是一个网页的源代码请多多指教,谢谢
      

  40.   

    呵呵,那楼主的问题基本确定了。其实说来说去就是<script>标签的问题。下面我给出两种解决办法:1.生成HTML文件。如前所说,由于document.write()这类方法的固有缺陷,document的内容一旦包含<script>标签就会出现问题;但是,用src="某网址"就不会有问题。这样,楼主可以把保存的HTML代码字符串通过FileStream对象,生成HTML文件,然后把iframe的src指向这个文件。2.去除<script>段代码。还是如前所说,既然有这个标签会出现问题,那么就去掉这个标签以及其包含的所有内容。但是这些JS函数还是要执行的啊,该怎么执行呢?方法就是,把本应包含在iframe中的JS函数全部挪至父页面,也就是包含iframe的页面,而把iframe页面对这些函数的引用,全都加上"parent."这样的东东。这个方法显然比第一个方法复杂,主要是要用不少字符串函数。另:除了<script>标签,其它的特殊字符,用转义符“\”来解决。
      

  41.   

    to liuqinglq(白菜) :
    你的方法很好,可是我的问题还是不能解决,原因如下:
    *************************************
    1.生成HTML文件。如前所说,由于document.write()这类方法的固有缺陷,document的内容一旦包含<script>标签就会出现问题;但是,用src="某网址"就不会有问题。这样,楼主可以把保存的HTML代码字符串通过FileStream对象,生成HTML文件,然后把iframe的src指向这个文件。
    ---------------------------
    可是在这个刚刚生成的html文件中必须带有用户登录信息,我该如何带有这个登录信息那?只有把这个网页设置成windows验证的。
    但是如果设置成windows验证的,那么访问的时候就会弹出用户名和密码,而我做这个功能的初衷就是不让弹出用户名和密码提示,而由程序自己写入。如果生成的新html文件还是要弹出用户名和密码的话,那么好像又回到了起点。2.去除<script>段代码。还是如前所说,既然有这个标签会出现问题,那么就去掉这个标签以及其包含的所有内容。但是这些JS函数还是要执行的啊,该怎么执行呢?方法就是,把本应包含在iframe中的JS函数全部挪至父页面,也就是包含iframe的页面,而把iframe页面对这些函数的引用,全都加上"parent."这样的东东。这个方法显然比第一个方法复杂,主要是要用不少字符串函数。
    -----------------------------------------
    可是我要访问的网页不只在我的控件上面调用,还要在其他程序中调用,有时是需要单独打开这个网页的,如果用parent...来实现javascript功能,那么在单独打开这个网页的时候就会出错。*********************************************************************
    我又想了一下,好像用html代码的方法确实有很多问题,因为我的服务器端还有很多需要处理的东西,单独一个静态页面好像不行,看来还是要想办法无验证的直接打开windows验证的网页(并且附带了登录信息),而不是用返回的html代码实现。看来还是要继续研究xmlHttp或者其他类似的方法
    *******************************************************************
    非常感谢你的回复,因为你让我认识到这种写html代码的方法是不可行的,也让我学到了很多东西。
    *******************************************************************
    看来现在只剩下一种方法了,如果你有时间还请指教以下,方法描述如下:◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆前提条件:
    (a). 我写的是一个web part,也就是一个自定义控件,运行在一个网站上。
    (b).当我们在访问一个基于windows验证的网页的时候,会弹出用户名和密码的提示,要求用户输入,现在我不想让用户输入用户名和密码,而是由这个控件中其他功能模块中记录的用户名和密码来模拟windows登录来访问这个网页。(c).为了实现这个目的,我考虑用xmlHttp的来实现。我定义了一个javascript函数
    --------------------------------------------
    <script language='javascript'>   
    <!--                                        
    function OpenWindowWithUserInfo(url)  
    {                                        
      var sUserName = getCookie('FGUserName');          
      var sPassword = getCookie('FGUserPassword');          
      var sDomain = getCookie('FGUserDomain');          
      if ( sUserName == null )         
      {         
      sUserName = '';         
      }         
      if ( sPassword == null )         
      {         
      sPassword = '';         
      }         
      if ( sDomain = null )         
      {         
      sDomain == '';         
      }         
      window.status='正在进行身份验证,可能需要几秒钟的时间,请耐心等待...'         
     if ( sUserName != '' )          
     {          
    var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.4.0');          
    xmlHttp.open('GET' , url , false , sUserName , sPassword );          
    xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );          
    xmlHttp.Send();          
    alert( sUserName );                
    alert( xmlHttp.status);                                             
    if( xmlHttp.status == '200' )          
    {          
     window.status=''         
       window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');          
     location.reload();          
    }          
     }              
      window.status=''         
    }                                       
    //-->                                      
       </script>  
    -------------------------------------------------
    这段javascript代码注册在客户端,然后调用这个函数,传入一个url,这个url就是基于windows验证的网页,注意下面这句话:
    if( xmlHttp.status == '200' )          
    {          
     window.status=''         
       window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');          
     location.reload();          
    }  也就是说,如果xmlHttp.status 等于 200的话,证明模拟windows登录成功,就直接打开这个网页,不用再另外回传html代码。
    ----------------------------- 
        这种方法在基于windows验证的网页所在的服务器上执行成功,打开的网页也具有了javascript代码中的用户身份。
        但是在服务器以外的其他机器上就执行不成功,xmlHttp.status 的值是401(没有权限)
        我试了MSXML2.XMLHTTP.4.0和MSXML2.XMLHTTP都不行,我也安装了微软的补丁http://support.microsoft.com/default.aspx?kbid=832414
        但是我不知道该如何设置权限,才能让其他机器上的用户用域用户登录可以用xmlHttp访问基于windows验证的网页。
      

  42.   

    还有一点就是下面这句话:
         xmlHttp.open('GET' , url , false , sUserName , sPassword );          
    里面没有域的信息,不知道该怎么样加入域的信息,我用了下面的代码:
        xmlHttp.open('GET' , url , false , 'domainname\'+sUserName , sPassword );   
    结果连在我机器上访问都提示没有权限,看来不行
    不知道怎么样加入域的信息,请指教:)-------------------------
    请各位多多指教,谢谢
      

  43.   

    XMLHTTP的东西我不大懂...我还是来和楼主讨论iframe的问题
    ************************************************************1.可是在这个刚刚生成的html文件中必须带有用户登录信息,我该如何带有这个登录信息那?只有把这个网页设置成windows验证的。
    但是如果设置成windows验证的,那么访问的时候就会弹出用户名和密码,而我做这个功能的初衷就是不让弹出用户名和密码提示,而由程序自己写入。如果生成的新html文件还是要弹出用户名和密码的话,那么好像又回到了起点。
    ----------------------------------------------
    楼主说必须带有用户登录信息,请问这登录信息是什么?
    为何必须设置成windows验证的?一个普通的HTML静态文件需要什么验证么?2.可是我要访问的网页不只在我的控件上面调用,还要在其他程序中调用,有时是需要单独打开这个网页的,如果用parent...来实现javascript功能,那么在单独打开这个网页的时候就会出错。
    ----------------------------------------------
    其它程序中调用就相应的改写啊,比如单独打开,那就不要"parent."啊,还是对你的“respstr”这个变量进行字符串处理啊。而且,看了你帖出的代码,那段HTML代码中,也就两个很简单的JS函数啊。
      

  44.   

    to liuqinglq(白菜) 为何必须设置成windows验证的?一个普通的HTML静态文件需要什么验证么?
    --------------------------------
    因为这个网页是用在一个流程中的,所以必须要附带当前操作人的信息进去,因为我们用的工作流是和活动目录结合在一起的,所以要用windows验证现在我已经发现,只有一个html静态页面会有很多问题,比如一些服务器端验证根本能进行,还有一些服务器操作也不能进行所以只好放弃这种方法,去研究xmlHttp了,看来还是要访问原始网页才可以
      

  45.   

    既然你说你的机器上所有页面没有办法必须全用windows验证,那么我知道你所要返回的html的“源”是你自己同一项目中的一个页面。我就不明白把页面适时修改为ascx有什么不可以?这个 ascx输出的html难道不是嵌入了其他网页的输出了吗?我不知道你绕来绕去的技术用意在哪里?是不是你在用 asp或者jsp编程序?如果用asp.net,应该使用好的技术,也算一个提高,至少不必绕来绕去。
      

  46.   

    好久没来,怎么多了
    看了很多,楼主的想法大致清楚了。我提如下建议,请尝试。
    第一:先获取当前用户的登陆令牌。你应该会吧:)
    第二:提取HTML代码。1.<Script/>中的代码,不包含<Scrpit>标记。2.<body/>间所有纯HTML代码。
    第三:使用RegisterClientScriptBlock或RegisterStartupScript方法注册所提取的JS代码。
    第四:将纯HTML代码写入IFREAM
    第五:如果提示用户名和密码,就在Page_Load中先申请用户认证。