ASP.NET WebForms中是否可以使用GET而不是POST方法?

3

我有一个网站,它被设置成定期验证用户。每次用户通过验证后都会被重定向到登录页面,该页面是 IIS 下的另一个 Web 应用程序。由于用户仍然有效,因此它将被重定向回来,但在此期间,它已经丢失了 postback 数据,使整个表单恢复为默认状态。

我的第一个想法是只需在表单上关闭视图状态,并在表单标记上使用 get 而不是 post。

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

get命令可以正常工作,但是查询字符串会打印出视图状态,导致URL过长。有没有简单的方法解决这个问题?基本上我想做的是完全关闭视图状态,我尝试使用enableviewstate,但是无法让它消失。

3个回答

2

您尝试过在web.config中设置enableViewState属性吗?这样您将会得到类似以下的内容:

<pages enableViewState="false">
    ....
</pages>

1
您可以使用Grant的建议在整个应用程序中禁用视图状态。或者,您可以在页面声明中关闭单个页面的视图状态。例如:
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" EnableSessionState="ReadOnly" %>

0

标题略微与问题相矛盾,因为似乎您实际的问题是,尽管您已经设置了EnableViewState=False,但仍然会将viewstate作为隐藏变量写入页面。

这个问题与此类似,但即使使用以下两种方法,仍然会写入隐藏字段:

您自己的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>

为什么我必须使用JavaScript来更改表单方法? 完全可以在表单标记中设置方法,但这并不能解决我的问题,因为查询字符串仍然变得太长。 另外,我认为你误解了我的问题...我根本不想要任何视图状态,因此如果我可以摆脱它,GET请求就可以工作。 - Tomas Jansson
@Tomas,如果没有头信息或查询字符串变量传回服务器,你打算如何发送数据? - Chris S
我不知道是我写的不够清晰还是你没理解,也可能两者都有 : )。我并没有说我不会返回任何查询字符串变量或标头... 我所请求的就是在WebForm页面上使用get而不是post,并且有选项可以忽略viewstate(如果我使用get,则viewstate变量存储在表单中的隐藏字段中)。当viewstate添加到查询字符串中时,生成的查询字符串会变得过长。 - Tomas Jansson
1
@Tomas,即使使用选项2也无法完成。不幸的是,您始终会得到一个名为_VIEWSTATE的隐藏字段。 - Chris S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接