ASP.net MVC - в IE9 есть дополнительный элемент с пустым ключом в коллекции форм - PullRequest
1 голос
/ 04 апреля 2011

У меня немного странная проблема, и я изо всех сил пытаюсь найти причину ...

У меня есть сайт 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 ]

1 голос
/ 07 мая 2014

FF, Chrome, Opera отправляет только значение элементов FORM (кнопка, ввод, ..) с ИМЯ.

IE всегда отправляет элементы на сервер, даже Submit с пустым именем и значением, что вызывает ошибку.

Поэтому, чтобы быть уверенным, всегда назовите элементы.

1 голос
/ 10 августа 2011

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 голос
/ 18 октября 2011

У меня были некоторые проблемы с моими сайтами MVC из-за функций кэширования, введенных для IE9.Моя работа заключалась в том, чтобы отключить кэширование в моем контроллере, добавив атрибут:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class FaxController : Controller
1 голос
/ 04 апреля 2011

Может быть стоит проверить все поля формы в firebug, чтобы увидеть, есть ли у вас безымянные элементы?Я знаю, что раньше меня застало поведение Select в IE.

...