2011-04-04 31 views
1

我有一個有點古怪的問題的一個額外的項目,我掙扎追查根源...ASP.net MVC - IE9與表單中收集的空鍵

我有一個ASP.net MVC網站,最近我的一位同事開始使用IE9,並注意到其中一個頁面出現問題 - 點擊保存時沒有更新。

我想,這可能會是一個腳本問題,因爲有這個頁面上的jQuery的公平位使用,並且它可能仍然是,但是:

如果我在Chrome提交此頁面(或IE8/7/6),然後我得到一個包含11個項目的表單集合,就像我期望的那樣。如果我在IE9中提交相同的頁面,我會在集合的末尾獲得一個額外的項目,其中有一個空字符串作爲鍵和一個空字符串作爲值。這會導致對UpdateModel()的調用不起作用(但不會引發異常) - 這些值都不會在我的對象中更新,並且ModelState仍然顯示爲有效。

到目前爲止,我只找到了這一頁,但我很好奇,如果有人可能知道是什麼造成這種情況?


更新04/04/2011 - 縮小的罪魁禍首:

我刪除的碼位,直到這個工作,並把範圍縮小到在我的驗證一些代碼。我使用jQuery的驗證插件,並已作爲提交處理(在名稱進行了一些新版本......)以下:

submitHandler: function (form) { 
    var submitForm = true; 
    var newValue, originalValue; 

    newValue= $("#newValue").val(); 
    originalValue= $("#originalValue").val(); 

    if (newValue!= originalValue) { 

     //affectedValues is an array populated at the top of the page. 
     if ($.inArray(originalValue, affectedValues) != -1 && 
      $.inArray(newValue, affectedValues) == -1) { 
      submitForm = confirm("Are you sure you want to do this"); 
     } 
    } 

    if (submitForm) { 
     form.submit(); 
    } 
}, 

從代碼(我可以做謝天謝地刪除此,因爲它是一個位遺留代碼)似乎使這項工作,我的表單集合中的空項目消失了。如果有人知道爲什麼會發生這種情況,那會很好。

+0

是否有機會將問題縮小爲可以在此發佈的簡單表單?當我升級到IE9時,我沒有注意到我的應用程序有任何問題。 – 2011-04-04 11:29:51

+0

我正在試圖縮小它的過程 - 它似乎與腳本有關,因爲當我註釋掉頁面上的所有腳本時,它就消失了......我使用jquery 1.5.2和jquery ui 1.8 .10(只是升級了IE9兼容性的jQuery lib ...)。 – Paddy 2011-04-04 11:50:15

回答

0

PDATE 04/04/2011 - 縮小的罪魁禍首:

我刪除的碼位,直到這個工作,並把範圍縮小到在我的驗證一些代碼。我使用jQuery的驗證插件,並已作爲提交處理(在名稱進行了一些新版本......)以下:

submitHandler: function (form) {  
var submitForm = true;  
var newValue, originalValue;  
newValue= $("#newValue").val();  
originalValue= $("#originalValue").val();  
if (newValue!= originalValue) {   
//affectedValues is an array populated at the top of the page.   
if ($.inArray(originalValue, affectedValues) != -1 &&    
$.inArray(newValue, affectedValues) == -1) {    
submitForm = confirm("Are you sure you want to do this");   
}  
}  
if (submitForm) {  form.submit(); }}, 

從代碼(我可以做謝天謝地刪除此,因爲它是一個位遺留代碼)似乎使這項工作,我的表單集合中的空項目消失了。如果有人知道爲什麼會發生這種情況,那會很好。

1

值得檢查firebug中的所有表單字段,看看您是否有任何未命名的元素?我知道我之前被IE中的選擇行爲抓住了。

+0

這是一個不錯的選擇,但是我在Firefox中沒有遇到這個問題...... – Paddy 2011-04-04 13:26:17

+0

或者使用IE DEV助手(或者您最喜歡的工具來檢查DOM)。你使用的是最新版本的JQuery.Validate嗎? – 2011-04-04 22:20:40

1

由於針對IE9的緩存功能,我的MVC網站出現了一些問題。我的工作是圍繞通過添加屬性來禁用在我的控制器緩存:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public class FaxController : Controller 
1

FF,鉻,歌劇只是發送表單元素(按鈕,輸入,..)與NAME的價值。

IE始終向服務器發送元素,甚至提交導致錯誤的空名稱和值。

所以可以肯定,總是命名元素。