2011-04-04 32 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始终向服务器发送元素,甚至提交导致错误的空名称和值。

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