如何在asp.net c#渲染覆盖中设置全局变量?

本文关键字:覆盖 设置 全局变量 asp net | 更新日期: 2023-09-27 18:04:26

好吧,我很可能只是错过了一些基本的东西,但我对此感到非常沮丧。

  public partial class myClass: System.Web.UI.Page
    { 
      public String pageHtml{
        get
        {
            if (ViewState["pageHtml"] != null)
            {
                return (string)ViewState["pageHtml"];
            }
            else
            {
                return null;
            }
        }
        set
        {
            ViewState["pageHtml"] = value;
        }
    }
      protected override void Render(HtmlTextWriter writer)
        {
            StringBuilder sbOut = new StringBuilder();
            StringWriter swOut = new StringWriter(sbOut);
            HtmlTextWriter htwOut = new HtmlTextWriter(swOut);
            base.Render(htwOut);
            string sOut = sbOut.ToString();
            pageHtml = sOut;
            writer.Write(sOut);
        }
      protected void btnDownloadPage_Click(object sender, EventArgs e)
        {
            DownloadTextAsFile("test", pageHtml, "aspx");
        }
        public void DownloadTextAsFile(string filename, string content, string extention)
        {

            string downloadFileName = filename + "." + extention;
            Response.AddHeader("Content-disposition", "attachment; filename=" + downloadFileName);
            Response.ContentType = "application/octet-stream";
            Response.Write(content);
            Response.End();
        }
}

当点击DownloadPage按钮时,pageHtml总是null。到底发生了什么事?我试过移动"pageHtml = sOut;"在"writer.Write(sOut);"之后我试过让pageHtml不坚持到视图状态,但没有这样的运气。(我也知道我的pageHtml get并没有真正检查任何东西,因为它返回null如果ViewState["pageHtml"]是空的,我可以返回ViewState["pageHtml"]没有if-else检查,但我不关心,现在)

如何在asp.net c#渲染覆盖中设置全局变量?

我认为ViewState在回发(你的按钮点击)后不存在。请尝试使用会话状态