Asp.net

完全刪除特定頁面的 ViewState

  • July 3, 2018

我有一個網站,其中包含一些不需要任何回發功能的頁面。它們只是顯示靜態HTML,甚至沒有任何關聯程式碼。但是,由於母版頁有一個<form runat="server">包含所有 s 的標籤ContentPlaceHolder,因此生成的 HTML 始終包含ViewState欄位,即:

<input
 type="hidden"
 id="__VIEWSTATE"
 value="/wEPDwUKMjEwNDQyMTMxM2Rk0XhpfvawD3g+fsmZqmeRoPnb9kI="
/>

**編輯:**我在頁面級別嘗試了兩種設置變體,EnableViewState但一點運氣都沒有:

<%@ Page Language="C#" EnableViewState="false" %>
<%@ Page Language="C#" EnableViewState="true" %>

我意識到,在解密時,該input欄位的值對應於<form>我無法刪除的標籤,因為它位於我的母版頁上。但是,我仍然想刪除僅顯示靜態 HTML 的頁面的 ViewState 欄位。可能嗎?

您可以覆蓋 Render 並使用正則表達式將其剝離。

按要求提供樣品。(注意:這樣做的成本幾乎肯定會大於任何可能的好處!)

[編輯:此功能還有助於通過更改 MIMEType 和文件副檔名來剝離所有隱藏的輸入框,以便將 HTML 輸出用作 word doc]

protected override void Render(HtmlTextWriter output)
{
   StringWriter stringWriter = new StringWriter();

   HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter);
   base.Render(textWriter);

   textWriter.Close();

   string strOutput = stringWriter.GetStringBuilder().ToString();

   strOutput = Regex.Replace(strOutput, "<input[^>]*id=\"__VIEWSTATE\"[^>]*>", "", RegexOptions.Singleline);

   output.Write(strOutput);
}

引用自:https://stackoverflow.com/questions/2432972