我试图在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" />
答案 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,指定验证和解密密钥。这将确保它在所有机器上都是相同的。如果未指定,则将自动生成。