2015-09-08 2 views
0

У меня есть веб-страница ASP .Net, которая заполняет DropDownList из кода позади. Значение DropDownList представляет собой значение xml. Он работает в Firefox и Chrome, но IE (IE11) теряет значение, его просто пустое, но только для DropDownList. Другие значения (текстовые поля) просто прекрасны.Internet Explorer теряет значение обратной передачи

В чем разница между обработкой обратной обработки в Firefox, Chrome и IE?

Я заменил каждый символ в строке xml на X, и он работает, IE возвращает значение DropDownList «xxxxxxxxxxx ...». Я заменил строку xml на «<>?!/& $ '\"() {} [] ", чтобы узнать, создает ли какой-то особый символ, но даже работает. Поэтому я пробовал этот метод:

System.Security.SecurityElement.Escape(); 

Но даже с этим, значение постбэк пуст.

в источнике HTML в Internet Explorer можно увидеть все значения, строка XML, закодированную строку XML, то «XXXXXXXXX ...» и т.д. Таким образом, IE принимает значение и помещает его в DropDownList, но если вы выберете строку xml (или закодированную строку xml) и сделаете обратную передачу, значение DropDownList будет пустым ...

+0

набор AutoPostBack = "истинный" – shreesha

+0

почему? Он работает в Firefox и Chrome без AutoPostBack = "true", почему, по вашему мнению, Internet Explorer нуждается в этом? – Tony

+0

Если я устанавливаю AutoPostBack = "true", он обновляет страницу каждый раз, когда я изменяю Selection (это правильно для AutoPostBack), но если я выберу значение, он обновится и не будет выбора. Другие элементы управления, сохраняющие их значения, только DropDownList с строкой xml как значением не поддерживают значение ТОЛЬКО в Internet Explorer. – Tony

ответ

1

Я нашел проблему, она не имеет ничего общего с xml, это была строка NewLine в строке xml. Internet Explorer не может обрабатывать значения обратной передачи, содержащие NewLines. Я должен заменить каждую новую строку в значениях DropDownList, теперь она работает! Я заменяю Environment.NewLine на фиктивное значение <NEWLINEDUMMY/>, и после того, как я получаю значение обратной передачи из DropDownList, я меняю замену.

Так первая:

System.Security.SecurityElement.Escape(xmlstring).Replace(Environment.NewLine, NEWLINEDUMMY); 

, а затем:

HttpUtility.HtmlDecode(postbackvalue).Replace(NEWLINEDUMMY, Environment.NewLine);