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

时间:2011-06-16 03:28:34

标签: c# javascript asp.net

我写了一个登录表单,调用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==]

有人知道我做错了吗?

2 个答案:

答案 0 :(得分:2)

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

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

private void Page_Init(object sender, System.EventArgs e)
{
    ...

    this.EnableViewState = false;

    ...
}

这将使您自己处理表单post变量,而不是通过viewstate数据填充页面变量,就像在asp.net回发中一样。

编辑:

viewstate是一个可序列化的数据,表示在呈现之前的页面状态。将数据发回服务器后,在页面中填充属性非常有用,这样当您访问这些属性时,您似乎无法在客户端 - 服务器环境中工作。 Viewstate在一堆其他内部asp.net架构中是一个可怕的黑客。如果在asp.net页面类中设置了很多属性,那么你应该小心viewstate,因为它增加了地狱的开销。

答案 1 :(得分:0)

问题是__ViewState字段。 ASP.NET尝试验证__ViewState内容,当您更改客户端上的目标时,您会混淆它。本页详细介绍了该做什么:http://www.codeproject.com/KB/aspnet/jsnopostback.aspx