Как программно получить html-разметку из aspx файла и отравить ее на компьютер-клиент?
Есть такая форма
Нужно по нажатию на кнопку «Напечатать» отправить на компьютер-клиент html-файл с этой формой. Как можно получить html-код из aspx-кода программно?
Ответы (1 шт):
Чтобы получить разметку программно, оберните нужное содержимое в элемент типа <div runat="server" id="divContent">. Тогда в коде вы сможете получить ее так:
using System;
using System.IO;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
//...
protected void Button1_Click(object sender, EventArgs e)
{
StringBuilder sb =new StringBuilder();
StringWriter wr =new StringWriter(sb);
Page page = new Page();
HtmlHead head = new HtmlHead();
head.Title = "Title";
page.Controls.Add(head);
HtmlForm f = new HtmlForm();
page.Controls.Add(f);
f.Controls.Add(this.divContent);
HttpContext.Current.Server.Execute(page, wr, true);
wr.Flush();
string html = sb.ToString();
}
Затем полученную строку можно отправить в Response (собственно, можно сразу писать в Response.OutputStream вместо StringBuilder). Чтобы заставить браузер скачать файл вместо отображения, можно либо выставить Content-Type в application/octet-stream, либо добавить Content-Disposition: attachment.
Если же нужно просто заставить браузер скачать текущую страницу как есть, можно поступить проще:
Response.AddHeader("Content-Disposition", "attachment; filename=form.html");
Ну и наконец, странно что вы в кнопке "Напечатать" хотите сделать скачивание файла. Возможно, вместо этого лучше реализовать вызов диалога печати:
this.ClientScript.RegisterStartupScript(this.GetType(), "script1", "window.print();",true);
