我有一个奇怪的问题,我正在努力追查根本原因......
我有一个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();
}
},
从代码中删除它(我可以幸运地做,因为它是一些遗留代码),似乎使这项工作,我的表单集合中的空项目已经消失。如果有人知道为什么会发生这种情况,那就太好了。
答案 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总是向服务器发送元素,甚至使用空名称和值提交会导致错误。
所以可以肯定的是,总是命名元素。