2013-12-18 37 views
0

我收到這個錯誤,當我提交我的表單大多數時間。我在ASP.NET MVC 4.0和JQuery Mobile上使用Sitefinity 6.2。ViewStateException - 視圖狀態MAC驗證失敗 - Sitefinity與MVC的MVC與JQuery的移動

因爲我在Hybred模式下有Sitefinity,所以我使用@ Html.BeginFormSitefinity()命令來創建表單。在控制器上我有[HttpPost]屬性的動作。代碼總是在控制器上點擊我的默認操作,沒有任何問題。無論我在提交表單時放入的內容是什麼,我只會在頁面上看到一條錯誤消息......從未打過HttpPost操作。

我環顧四周,並有許多頁面修復MAC失敗的問題,但沒有人爲我工作。我在web.config中有一個機器鍵,我不會將enableViewStateMac設置爲false,因爲這是一個安全漏洞。

回答

0

好吧我試着用下面的兩個解決方案,但他們都很糟糕。這是我現在正在做的,但仍然不是很好,但我有Sitefinity,MVC和JQuery Mobile都在同一頁面上,表單不再給我View State Exceptions。

首先,添加data-ajax =「false」是不夠的,爲此,您需要在JQuery Mobile啓動之前禁用Ajax。因此,爲此,您需要在加載JQuery Mobile File之前添加此腳本,但在加載JQuery文件之後。

$(document).bind("mobileinit", function() { $.mobile.ajaxEnabled = false; }); 

這樣做我那麼不使用Sitefinity開始表格後,我只是jQuery來改變主網頁上的表格有正確的行動。

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

一起,這意味着有每一頁變化的完整的頁面加載,並形成崗位使用我的WebForms母版頁聲明的形式。

-old答案 - 其實...我有什麼下面是行不通的。我現在做的 真的很難看,但通常工作。

只要用戶從主頁進入網站,然後家裏的 頁是Jquery Mobile的首頁。 I 獲得的視圖狀態錯誤是因爲它將當前頁面看作是第一頁,而提交的表單是活動頁面。如果主頁 的控制器剛設置爲處理所有HTTPPost調用,該怎麼辦?我有 從表格 中刪除了所有視圖中的@ Html.BeginFormSitefinity(),並且僅使用頂級主頁上的表單。然後在視圖上添加 代碼,將此表單的動作更改爲指向 主頁面控制器。前

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

一旦我做了這個變化的形式不扔視圖狀態 例外......只要主頁是jQuery Mobile的第一頁。 如果用戶從不同的頁面進入,則全部被加擾。 還沒有答案。

  • 真的老了答案 -

OK,想我已經找到了。我在某處讀過,現在丟失了鏈接,可能導致錯誤消息的問題列表爲 。其中之一是從不同頁面提交的 表單。

我看着我和Fiddler一起收到的錯誤消息,注意到 Referer是我的主頁,但表單發佈的URL是我的表單的頁面的 URL。而不是通過我的網站 瀏覽我的網頁與表格我在地址欄中鍵入的網址。我試過 再次提交我的表單,現在它的工作原理!

所以,這是Sitefinity和JQuery Mobile爭論的問題。

當asp.net MVC在Sitefinity的Hybred模式下運行時,它實際上是 在包含表單的Web.Forms母版頁中運行。當您使用 @ Html.BeginFormSitefinity()將視圖添加到視圖時,它實際上是 只需添加一個div,然後使用AJAX在 Web.Forms母版頁上提交表單。

JQuery Mobile會加載您訪問的第一頁,但後面的頁面 只會注入到現有頁面中。所以,有多個 data-role =「page」div加載到DOM中,位於Sitefinity Web.Forms Master Page內。

這一切都會導致表單以 active data-role =「page」的URL發佈,但服務器發現它正在從我加載的原始頁面引用 。所以,如果我去 的頁面的形式首先都會工作,在任何其他頁面啓動它不 工作。

現在我知道了這一點,我可以在鏈接到 頁面的表單中輸入data-ajax =「false」,並且所有外觀都可以正常工作。這會導致JQuery Mobile不會將目標頁面注入當前頁面,但 會加載全部新的目標頁面。

data-ajax =「false」就是答案!

+0

此外,請確保你不把[的OutputCache(NoStore = TRUE,持續時間= 0,VaryByParam時= 「*」)上的動作。從這得到相同的視圖狀態異常... –