我有一个网站设置为不时验证用户。每次验证用户时,用户都会被重定向到登录页面,这是IIS下的另一个Web应用程序。由于用户仍然有效,它将被重定向回来,但在此期间它丢失了回发数据,使整个表单设置为默认值。
我的第一个想法是在表单上关闭视图状态并使用get而不是在表单标签上发布
<form runat="server" method="get" enableviewstate="false">...</form>
get命令有效,但是查询字符串会打印视图状态,使url变长。有一些容易解决这个问题吗?基本上我想做的是完全关闭viewstate,我试图使用enableviewstate
,但我不能让它消失。
答案 0 :(得分:2)
您是否尝试过在web.config中设置enableViewState属性,这样您就会看到以下内容:
<pages enableViewState="false">
....
</pages>
答案 1 :(得分:2)
您可以使用Grant的建议在整个应用程序中禁用viewstate。或者,您可以在Page的声明中将其关闭为单个页面。例如:
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" EnableSessionState="ReadOnly" %>
答案 2 :(得分:-1)
标题与此问题略有矛盾,因为您的实际问题似乎是虽然您设置了EnableViewState=False
,但您仍然将查看状态写入页面作为隐藏变量。
This question沿着相同的路线,但即使您使用这两种方法,仍会写入隐藏的字段:
您自己的PageStatePersister:
public class EmptyStatePersister : PageStatePersister
{
public EmptyStatePersister(Page page) : base(page) { }
public override void Load() { }
public override void Save() { }
}
protected override PageStatePersister PageStatePersister
{
get
{
return new EmptyStatePersister(this);
}
}
您自己的网页类,因为链接的问题描述了:
public class EmptyViewStatePage : Page
{
public override bool EnableViewState
{
get
{
return false;
}
set
{
base.EnableViewState = false;
}
}
protected override void SavePageStateToPersistenceMedium(object state)
{
}
protected override object LoadPageStateFromPersistenceMedium()
{
return null;
}
}
所以你留下了jQuery:
<script type="text/javascript">
$(document).ready(function ()
{
$("#__EVENTVALIDATION").remove();
$("#__VIEWSTATE").remove();
});
</script>