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

Posted

技术标签:

【中文标题】如何在 asp.net c# 渲染覆盖中设置全局变量?【英文标题】:How do I set a global Variable in asp.net c# render override? 【发布时间】:2011-08-04 15:28:17 【问题描述】:

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

  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 获取并没有真正检查任何内容,因为如果 ViewState["pageHtml"] 为 null 并且我可以返回 ViewState["pageHtml"] 而不进行 if-else 检查但我不关心现在)

【问题讨论】:

可以移到init或者load方法吗? 检查页面属性 EnableViewState - 是真的吗? 【参考方案1】:

我认为 ViewState 在回发(您的按钮单击)后无法生存。 尝试使用会话状态 instead。

【讨论】:

当用户打开一个页面会在新选项卡中打开一个链接并按下第一页上的“下载”按钮时会出现一些有趣的场景 好吧,如果需要,您可以通过在存储变量、变量名称、使存储的对象复杂化等逻辑中添加一个新折叠来弥补这一点……否则。

以上是关于如何在 asp.net c# 渲染覆盖中设置全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net core 3 中设置 json 序列化程序设置?

如何在生产环境中设置 ASP.NET 5 环境变量

如何在 ASP.NET Core 中设置 cookie validateInterval?

如何在 ASP.NET Core 中设置默认区域?

如何在 ASP.NET 5 Identity 中设置 PasswordHasherCompatibilityMode.IdentityV3?

如何在 ASP.net 页面中设置面包屑导航