c#表单提交viewstate错误

时间:2009-09-17 13:30:00

标签: c# webforms viewstate

我试图在C#中设置登录功能,我在default.aspx上有一个表单,该表单发布到运行逻辑的Login.aspx。

但是当表单发布到Login.aspx时,我收到MAC viewstate验证错误。这是什么以及为什么?

当我直接从浏览器调用Login.aspx时,我没有收到任何错误,只有当表单发布到它时才会出错。

Default.aspx表单代码:

    <form id="form1" runat="server" method="post" action="Login.aspx">
<div>
  <input type="text" name="lgn" id="lgn" runat="server" /> Login<br />
  <input type="password" name="pwd" id="pwd" runat="server" /> Password<br /><br />
  <input type="submit" name="submit" id="submit" value="Login" runat="server" />

</div>
</form>

将表格发布到同一个项目中的另一个页面是否有任何限制,或者我错过了哪个设置?

提前致谢

我通过使用asp:按钮上的PostBackURL属性而不是表单tagg上的action属性来解决它,如下所示:

<asp:Button id="btnSubmit" runat="server" text="login" PostBackUrl="~/Login.aspx" />

3 个答案:

答案 0 :(得分:2)

我认为你想要使用以下

<asp:Button ID="btnClickie" Text="Click Me" runat="server" PostBackUrl="~/Login.aspx" />

而不是将表单的操作设置为Login.aspx,但您必须提取上一页的数据。您可以使用此页面注册上一页......

<%@ PreviousPageType VirtualPath="~/Page1.aspx" %>

然后你就可以从另一个页面中提取控件(前提是它们上面有runat =“server”)。至少在理论上。

http://aspalliance.com/135有一篇关于ViewState的公正文章,但它没有针对这个问题的冒烟。

答案 1 :(得分:1)

这些表单的常用方式是回发给自己(然后可能会重定向到另一个页面)。

答案 2 :(得分:0)

如果您在前面有多个带有负载平衡路由器的Web服务器,则可能会发生这种情况。我写了一篇关于这个的博客文章。 Read it here。您基本上必须将machineKey设置添加到web.config,指定验证和解密密钥。这将确保它在所有机器上都是相同的。如果未指定,则将自动生成。