前四贴已经结贴  谢谢  <form id="form1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server" Height="284px" TextMode="MultiLine" 
        Width="721px"></asp:TextBox>
    <br />
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    <asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Text="22" Value="22">
    </asp:ListItem>
    <asp:ListItem Text="11" Value="11">
    </asp:ListItem>
    </asp:DropDownList>
    </form>
protected void Button1_Click(object sender, EventArgs e)
    {
        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
        this.RenderControl(oHtmlTextWriter);
        TextBox1.Text = oStringWriter.ToString();
        //后面不能按Response.End(); 因为后面我还有程序要执行
    }以下是sp1234 的解决方案,和我的注释using System.IO;
using System.Text;
using System.Web.UI;public partial class TestRenderToFile : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        String HtmlCode=?????//我希望的是在这个地方来直接得到他的HTML
    }    protected override void Render(HtmlTextWriter writer)
    {
        if (判断是否需要记录此页())
        {
            //我看了里这,这里的意思就是说如果要取得当前的网页的源码的时候
              //就在"判断是否需要记录此页"然后在Page.Render的时候保存为一个文件
              //问题
              //但这里的时候已经是程序的最后,也就是我的Button_OnClick中是没有办法取得的,
            //谢谢
            StringBuilder ee = new StringBuilder();
            StringWriter we = new StringWriter(ee);
            HtmlTextWriter hw = new HtmlTextWriter(we);
            base.Render(hw);
            string file = 取得文件名();
            File.WriteAllText(file, ee.ToString());
            writer.Write(ee.ToString());
        }        else base.Render(writer);
    }    private string 取得文件名()
    {
        return Server.MapPath("~/App_Data/TestRender.html");
    }    private bool 判断是否需要记录此页()
    {
        return true;
    }
}
http://topic.csdn.net/u/20080927/16/b267b233-3500-47d8-9d7d-05c5496d91db.html?1527038574
|zyciis| 400分求:真的这么难吗 已经发四贴了:如何在后台获取到当前页面提交的所有HTML源码 急 谢谢
|zyciis| RenderControl 出错 一页只能有一个服务器端 Form 标记。 谢谢 急  
http://topic.csdn.net/u/20080926/16/ad076ff4-26ad-42e6-bf0c-2e0750bab107.html 
|zyciis| 如何在后台获取到当前页面提交的所有HTML源码 急 谢谢  
http://topic.csdn.net/u/20080927/09/c205f030-8b7b-4f40-95c5-ac473e84f889.html?seed=1787685840 
|zyciis| 如何最快的将一个控件输出指定一串字符串 谢谢  
http://topic.csdn.net/u/20080925/18/d53ee45a-a614-430e-bac9-26b241097db0.html 

解决方案 »

  1.   



    如果回答是
    WebRequest WebClient Execute,
    就请不要回答了,看清楚我上面的要求
    还有前几贴已经说明了这些都是不行的了

      

  2.   


    证明你一点也懂去了解HTTP协议吧客户端压根就没有向服务器发HTML源文件的包试问服务器怎么可能有HTML的代码哎,不懂还在这里大声嚷嚷
      

  3.   


     //取得输入的URL地址
    PageUrl = UrlText.Text;
    WebClient wc = new WebClient();
    //把已登录的用户或正被模拟的用户的用户凭据赋给用于对向Internet资源的请求进行身份验证的网络凭据
    wc.Credentials = CredentialCache.DefaultCredentials;
    ///从指定的URI下载数据
    Byte[] pageData = wc.DownloadData(PageUrl);
    //把下载到的字符型数组数据转换成字符串类型
    ContentHtml.Text = Encoding.Default.GetString(pageData);
      

  4.   

    我还是没有很清楚你的问题。你说要“获取到此页面提交的所有html源码”,那么你在Button1_Click中只是为一个标志变量设置一下,然后在Render时去判断这个变量(判断是否需要记录此页),如果需要记录就记录下来。把你认为写在Button1_Click中的那个代码写在Render中这有什么不行呢?你的注释中没有明为什么你的Button1_Click中要取得,而不能将逻辑改为在Render中 writer.Write(ee.ToString()); 这一行之前才执行你要做的事。设计操作总是要顺着庞大的底层系统的结构,自然而然地设计,除非你自己设计一套asp.net。因此取得页面要提交的所有html源码,合理的地方就是Render。你的逻辑可以做一些调整,只要得到正确的结果并且不影响扩展就可以,除非你测试出得到的结果哪里出问题了,或者那种扩展程序出问题了,否则最好可以接受任何编程方法,而对编程的格式、位置不要硬性规定。
      

  5.   

    另外,“当前页面提交的所有HTML”这是这当前页面输出到浏览器端的。用户在客户端提交请求,并不提交html过来。如果你是指用户从客户端提交html,那么这是无源之水无本之木。实际上提交几个简单的数值,然后给出你这个页面的地址,客户端就这样提交了。服务器端并没有前一页面输出的html。如果你要记录客户提交时的状态,又不想那些控件的值自己记录起来,你可以在Button1_Click中去检索上一次页面Render时输出的html。当然,此时你需要在“private string 取得文件名()”中生成一个随机文件名,并且把这个文件名保存在页面状态集合ViewState中,这样下一次回发时才能在 Button1_Click 中从ViewState中找出上一次输出的html的文件名,直接读出文件内容。
      

  6.   


    是啊,只把表单里的input控件的数据传到服务器如果楼上在输出的时候用ViewState保存的话那另当别论
      

  7.   


    <html>
    ..
    ..
    ..
    ..
    <form>
    <input id="code" name="code" type="text" value="" />
    </form>
    </html>
    在提交服务器之前调用脚本document.getElementById("code").value=document.getElementsByTagName('html')[0].outerHTML
    然后服务器端Request.Form["code"]即可获取当前整个页面的html代码