Asp.net mvc 4 ViewStateException-viewstate MAC验证失败-使用Jquery Mobile的Sitefinity ASP.NET MVC

Asp.net mvc 4 ViewStateException-viewstate MAC验证失败-使用Jquery Mobile的Sitefinity ASP.NET MVC,asp.net-mvc-4,jquery-mobile,viewstate,sitefinity,Asp.net Mvc 4,Jquery Mobile,Viewstate,Sitefinity,我在提交表格时,大部分时间都会遇到这个错误。我将SiteFinity6.2与ASP.NETMVC4.0和JQuery Mobile一起使用 由于我在混合模式下使用Sitefinity,所以我使用@Html.BeginFormSitefinity()命令来创建表单。在控制器上,我的操作具有[HttpPost]属性。代码总是在控制器上点击我的默认操作,没有问题。无论我在提交时在表单中输入什么,我只会在页面上收到一条错误消息…永远不会点击HttpPost操作 我环顾四周,有很多页面都有关于MAC失败问

我在提交表格时,大部分时间都会遇到这个错误。我将SiteFinity6.2与ASP.NETMVC4.0和JQuery Mobile一起使用

由于我在混合模式下使用Sitefinity,所以我使用@Html.BeginFormSitefinity()命令来创建表单。在控制器上,我的操作具有[HttpPost]属性。代码总是在控制器上点击我的默认操作,没有问题。无论我在提交时在表单中输入什么,我只会在页面上收到一条错误消息…永远不会点击HttpPost操作


我环顾四周,有很多页面都有关于MAC失败问题的修复,但没有一个对我有效。我在web.config中有一个机器密钥,我不会将enableViewStateMac设置为false,因为这是一个安全漏洞。

好的,我尝试使用以下两种解决方案,但它们都非常糟糕。这就是我现在所做的,这仍然不是很好,但我有Sitefinity、MVC和JQuery Mobile都在同一个页面上,表单不再给我视图状态异常

第一件事是添加数据ajax=“false”是不够的,要使其起作用,您需要在jquerymobile启动之前禁用ajax。因此,要做到这一点,您需要在JQuery移动文件加载之前但在JQuery文件加载之后添加此脚本

$(document).bind("mobileinit", function () { $.mobile.ajaxEnabled = false; });
完成此操作后,我不再使用SiteFinityBegin表单,而是通过JQuery来更改主页上的表单以执行正确的操作

<script>
    $("#aspnetForm").attr("action", "Home/Login");
</script>

$(“#aspnetForm”).attr(“操作”、“主页/登录”);
这意味着每次页面更改都有一个完整的页面加载,表单帖子使用我的WebForms母版页面中声明的表单

-旧答案- 事实上…我下面的东西不起作用。我是什么 目前的做法确实很难看,但通常是有效的

只要用户从主页进入站点,那么主页 页面是Jquery Mobile的第一个页面。视图状态错误,我 是因为它将当前页视为第一页 表单已提交到活动页面。如果控制器为 主页刚刚设置为处理所有HTTPPost调用?我有 从包含表单的所有视图中删除了@Html.beginformstefinity() 我只是在使用我的顶级母版页上的表格。然后我加上 视图上的代码将此窗体的操作更改为指向 主页面控制器。前

<script>
    $("#aspnetForm").attr("action", "Home/Login");
</script>

$(“#aspnetForm”).attr(“操作”、“主页/登录”);
一旦我做了这个更改,表单就不会抛出视图状态 例外情况……只要主页是Jquery Mobile首页。 如果用户来自不同的页面,则所有内容都将被置乱。 还没有答案

  • 真是老生常谈-
好的,我想我找到了。我在某个地方读到,现在失去了链接,一个 可能导致错误消息的问题列表。其中之一就是 从其他页面提交的表单

我看了看与Fiddler一起收到的错误消息,发现 推荐人是我的主页,但表单帖子的URL是 包含我的表单的页面的URL。而不是浏览我的网站 我在地址栏中键入了URL,并将其添加到带有表单的页面。我试过了 再次提交我的表格,现在它工作了

因此,这是一个Sitefinity的问题,jQueryMobile正在解决这个问题

当asp.net MVC在Sitefinity中以混合模式运行时,它实际上是 在包含表单的Web.Forms母版页中运行。当你使用 @Html.BeginFormSitefinity()将表单添加到它实际所在的视图中 只需添加一个div,然后使用AJAX在 表单母版页

JQuery Mobile会加载您访问的第一个页面,但会加载以后的页面 只是被注入到现有页面中。因此,有多个 data role=“page”加载到DOM中的div,位于Sitefinity内部 表单母版页

这一切一起导致表单以 活动数据角色=“页面”,但服务器看到它正在被引用 从我加载的原始页面。所以,如果我和 表单首先会工作,从它不工作的任何其他页面开始 工作

现在我知道了这一点,我可以在链接到 页面上的表单和所有看起来都在工作。这将导致 JQuery Mobile不将目标页面注入当前页面,而是 将加载所有新的目标

数据ajax=“false”就是答案


此外,请确保不要将[OutputCache(NoStore=true,Duration=0,VaryByParam=“*”)放在操作上。正在从此获取相同的视图状态异常。。。