Ker*_*ido 16 asp.net viewstate optimization
我有一个网站,其中包含一些不需要任何回发功能的页面.它们只显示静态 HTML,甚至没有任何相关的代码.但是,由于母版页有一个<form runat="server">包装所有ContentPlaceHolders 的标记,因此生成的HTML总是包含ViewState字段,即:
<input
type="hidden"
id="__VIEWSTATE"
value="/wEPDwUKMjEwNDQyMTMxM2Rk0XhpfvawD3g+fsmZqmeRoPnb9kI="
/>
Run Code Online (Sandbox Code Playgroud)
编辑:我尝试了EnableViewState在页面级别设置的两种变体,但没有运气:
<%@ Page Language="C#" EnableViewState="false" %>
<%@ Page Language="C#" EnableViewState="true" %>
Run Code Online (Sandbox Code Playgroud)
我意识到,当解密时,该input字段的值对应于<form>我无法删除的标记,因为它在我的母版页上.但是,我仍然希望删除仅显示静态HTML的页面的ViewState字段.可能吗?
Mar*_*ith 23
您可以覆盖渲染并使用正则表达式将其剥离.
按要求提供样品.(注意:这样做的开销几乎肯定会超过任何可能的好处!)
[编辑:此功能对于剥离所有隐藏的输入框也很有用,可以通过更改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);
}
Run Code Online (Sandbox Code Playgroud)
Arj*_*ang 18
将以下方法添加到页面:
protected override void SavePageStateToPersistenceMedium(object state)
{
//base.SavePageStateToPersistenceMedium(state);
}
protected override object LoadPageStateFromPersistenceMedium()
{
return null; //return base.LoadPageStateFromPersistenceMedium();
}
protected override object SaveViewState()
{
return null;// base.SaveViewState();
}
Run Code Online (Sandbox Code Playgroud)
结果:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25159 次 |
| 最近记录: |