ASP.net MVC - IE9在表单集合中有一个空键的额外项目

时间:2011-04-04 11:27:21

标签: asp.net-mvc internet-explorer-9

我有一个奇怪的问题,我正在努力追查根本原因......

我有一个ASP.net MVC网站,最近我的一个同事开始使用IE9,并注意到其中一个页面存在问题 - 点击保存时没有更新。

我认为这可能是一个脚本问题,因为在这个页面上使用了相当多的jQuery,它可能仍然是,但是:

如果我在Chrome(或IE8 / 7/6)中提交此页面,那么我会收到包含11个项目的表单集合,正如我所料。如果我在IE9中提交相同的页面,我会在集合的末尾获得一个额外的项目,其中一个空字符串作为键,一个空字符串作为值。这导致对UpdateModel()的调用不起作用(但不抛出异常) - 我的对象中没有更新这些值,并且ModelState仍然显示为有效。

到目前为止,我只找到了这一页,但我很好奇是否有人知道是什么导致了这一点?


更新04/04/2011 - 缩小罪魁祸首:

我删除了一些代码直到这个工作,并在我的验证中缩小到一些代码。我使用jQuery validate插件,并将以下内容作为提交处理程序(对名称执行了一些编辑...):

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();
    }
},

从代码中删除它(我可以幸运地做,因为它是一些遗留代码),似乎使这项工作,我的表单集合中的空项目已经消失。如果有人知道为什么会发生这种情况,那就太好了。

4 个答案:

答案 0 :(得分:1)

可能值得检查firebug中的所有表单字段,看看你是否有任何未命名的元素?我知道我之前被IE中的Select行为搞砸了。

答案 1 :(得分:1)

pdate 04/04/2011 - 缩小罪魁祸首:

我删除了一些代码直到这个工作,并在我的验证中缩小到一些代码。我使用jQuery validate插件,并将以下内容作为提交处理程序(对名称执行了一些编辑...):

    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();    }},

从代码中删除它(我可以幸运地做,因为它是一些遗留代码),似乎使这项工作,我的表单集合中的空项目已经消失。如果有人知道为什么会发生这种情况,那就太好了。

答案 2 :(得分:1)

由于IE9引入了缓存功能,我的MVC网站出现了一些问题。我的工作是通过添加属性来禁用控制器中的缓存:

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

答案 3 :(得分:1)

FF,Chrome,Opera只使用NAME发送FORM元素(按钮,输入,...)的值。

IE总是向服务器发送元素,甚至使用空名称和值提交会导致错误。

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