如何使用Javascript将控制权转移到ASPX页面

本文关键字:ASPX 页面 转移 控制权 何使用 Javascript | 更新日期: 2023-09-27 17:59:11

我编写了一个登录表单,调用WebMethod进行身份验证。这部分工作正常。

如果用户已经过身份验证,我想使用javascript将控制权转移到另一个表单。以下是我的代码:

            var f = document.getElementById("form1");
            f.action = "http://localhost/demo/WebForm2.aspx";
            f.method = "POST";
            f.submit();

我得到以下异常:

[ViewStateException: Invalid viewstate. 
Client IP: 127.0.0.1
Port: 2614
Referer: http://localhost/demo/authenticate.aspx
Path: /demo/WebForm2.aspx
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
ViewState: /wEPDwUJNzgzNDMwNTMzZGRVwSzsPTf15ks/Fy9lgs6EmnjDEeWgjaAnQ01MZDLGJg==]

有人知道我做错了什么吗?

如何使用Javascript将控制权转移到ASPX页面

发生此错误的原因是接收回发的页面正试图使用Viewstate数据来填充其属性的页面,但该数据无效,因为Viewstate是由另一个页面创建的。

如果不需要,您可以禁用视图状态,这将解决您的问题。

private void Page_Init(object sender, System.EventArgs e)
{
    ...
    this.EnableViewState = false;
    ...
}

这将使您自己处理表单post变量,而不是像在asp.net回发中一样,由视图状态数据填充页面变量。

编辑:

viewstate是一个可序列化的数据,表示页面在呈现之前的状态。这对于在将数据发布回服务器后填充页面中的属性非常有用,这样当您访问这些属性时,就会显示您不是在客户端-服务器环境中工作。Viewstate在asp.net体系结构中是一个糟糕的黑客。如果你在asp.net页面类中设置了很多属性,那么你应该小心处理viewstate,因为它会像地狱一样增加开销。

问题在于__ViewState字段。ASP.NET尝试验证__ViewState内容,当您更改客户端上的目标时,会混淆它。此页详细描述了要执行的操作:http://www.codeproject.com/KB/aspnet/jsnopostback.aspx