是否可以在ASP.NET webforms中使用get而不是post?

时间:2011-03-31 11:25:29

标签: asp.net webforms

我有一个网站设置为不时验证用户。每次验证用户时,用户都会被重定向到登录页面,这是IIS下的另一个Web应用程序。由于用户仍然有效,它将被重定向回来,但在此期间它丢失了回发数据,使整个表单设置为默认值。

我的第一个想法是在表单上关闭视图状态并使用get而不是在表单标签上发布

<form runat="server" method="get" enableviewstate="false">...</form>

get命令有效,但是查询字符串会打印视图状态,使url变长。有一些容易解决这个问题吗?基本上我想做的是完全关闭viewstate,我试图使用enableviewstate,但我不能让它消失。

3 个答案:

答案 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>