【问题标题】:Validation of viewstate MAC failed with server.transfer使用 server.transfer 验证视图状态 MAC 失败
【发布时间】:2014-06-04 05:23:32
【问题描述】:

我已经对此进行了一些谷歌搜索,并且我知道类似的问题已被多次询问,但到目前为止我没有任何运气。

我们网站上的主页也设置为 404/410 错误页面。当我对此页面执行server.transfer 时,页面上的搜索表单不再起作用。 Response.redirect 到这个页面,它工作正常。

所以在我的代码中进行服务器传输的页面有

Server.Transfer("/default.aspx?status=410", false);

当我从转移到达那里后使用default.aspx 上的搜索表单时,我得到标题中的错误。

我还看到表单上的操作值有一个值,而通常它应该是空白的。我看到另一篇文章建议在我的内容页面中手动设置此值,但我必须对表单的 ID 进行硬编码,而且我不确定这是否会导致其他页面出现问题,因为此表单已被所有页面上的页面使用网站,因为此母版页是整个网站的主要母版页。另外,即使我对 ID 进行了硬编码,然后使用 Page.Master.Findcontrol 获取表单并设置 Action = "" 它仍然为操作设置了值而不是空字符串。

我原以为只要不使用Server.Transfer("", true) 就不会出现此错误。我的 web.config 中有一个 machineKey 条目

有人对如何解决这个问题有任何建议吗?

谢谢

【问题讨论】:

    标签: c# asp.net forms webforms


    【解决方案1】:
    Server.Transfer() 
    

    Response.Redirect()

    两者都执行相同的功能,例如帮助将用户从一个页面导航到另一个页面,但系统内部发生的内部流程略有不同。要了解更多信息,请访问 http://www.dotnet-tricks.com/Tutorial/csharp/c4SE281212-Difference-between-Response.Redirect-and-Server.Transfer.html

    【讨论】:

    • 你好。谢谢回复。我了解 Server.Transfer 和 Response.Redirect 之间的区别。我试图找出如何使用 Server.Transfer 将用户重定向到另一个页面。我不想使用 Response.Redirect。如果您有任何想法如何使用 Server.Transfer 并且当我在正在传输的页面上提交表单时没有让 viewstate mac 失败,我将不胜感激。谢谢
    【解决方案2】:

    我想我找到了解决方案,但我希望能得到一些反馈来解释某些事情。

    在被转移到(default.aspx)的页面上,我尝试使用 Form.Action = "" 并且当我加载导致操作类似于 action="/../../.. /default.aspx"

    刚才我又试了一次,但我使用了 Form.Action = "/",它确实将操作设置为 "/",这似乎有效。

    所以我想我的问题是为什么尝试将操作设置为“”会导致该相对 url? 这是处理这个问题的正确方法吗?

    谢谢

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2011-12-18
      相关资源
      最近更新 更多