【问题标题】:c# Form submit viewstate errorc#表单提交viewstate报错
【发布时间】:2009-09-17 13:30:00
【问题描述】:

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

但是当表单发布到 Login.aspx 时,我得到一个 MAC 视图状态验证错误。这是什么,为什么?

当我直接从浏览器调用 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:button 上的 PostBackURL 属性而不是 form tagg 上的 action 属性解决了这个问题,如下所示:

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

【问题讨论】:

  • 你能把两个“HttpException (0x80004005)”后面的消息翻译成英文吗?
  • 验证 MAC 视图状态失败。如果应用程序在 Web 组或集群中,请确保配置指定相同的 validationKey 和验证算法。自动生成不能在集群中使用。

标签: c# webforms viewstate


【解决方案1】:

我认为您想使用以下内容

<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 的文章,但它没有针对这个问题的确凿证据。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 2020-11-24
        • 2014-04-13
        • 1970-01-01
        • 2016-01-09
        • 2013-02-17
        相关资源
        最近更新 更多