Содержимое UIWebview и IPhone не выполняет обратную передачу (проблемы с возможностями браузера ASP.NET)

У меня есть простая страница, ее структура выглядит следующим образом (псевдокод):

<aspx page>
    <ascx control>
        <asp:dropdownlist id="dd1" autoPostback=true />
        <asp:dropdownlist id="dd2" />
    </ascx control>
</aspx page>

В ЛЮБОМ настольном браузере dd1 отправляет ответ и запускается событие сервера "SelectedIndexChanged". Однако в сафари IPhone или веб-просмотре IPhone обратная передача не выполняется. Я знаю это, потому что индикатор сетевой активности не отображается, и я подключил отладчик к сайту, который перехватывает все события на стороне сервера, и он никогда не срабатывает. Иногда, примерно раз в 2 часа, постбэк на айфоне УЖЕ работает, но крайне редко и с перебоями.

Dd1 — это раскрывающийся список дат, который загружает раскрывающийся список временных интервалов, зависящий от выбранного элемента в раскрывающемся списке дат. Эта форма повторно используется во многих местах, и я не хочу менять базовую структуру, если это не последнее усилие.

Javascript включен в настройках сафари.

Достаточно просто, верно? Я пытаюсь понять, как отлаживать ошибки javascript в веб-просмотре, но мне было интересно, знает ли кто-нибудь, что за странность создала такое поведение.


person Chuck Pinkert    schedule 01.09.2011    source источник


Ответы (1)


Пользовательский агент IPhone UIWebView не распознавался ASP.NET 4.0, поэтому asp.net использовался по умолчанию, версия страницы нижнего уровня, которая не включала javascript. Пользовательский агент веб-просмотра iphones был:

Mozilla/5.0 (iPhone; U; ЦП iPhone OS 4_3_5, как Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, например, Gecko) Mobile/8L1

Чтобы этого не произошло, я изменил свойство «ClientTarget» страницы на «UpLevel», которое обходит asp.net, пытающийся выяснить возможности браузера, и просто обслуживает версию javascript «Uplevel» и все такое.

Решение на моей странице Page_Load:

Me.ClientTarget = "уровень выше"

or

this.ClientTarget = "уровень выше";

person Chuck Pinkert    schedule 07.09.2011
comment
Это своего рода хак. Лучше исправить App_Browsers или обновить глобальный список браузеров. См. обходной путь, опубликованный pravav rastogi (работает для Microsoft) по адресу connect.microsoft.com/VisualStudio/ обратная связь/детали/631438 - person Brian; 08.10.2012
comment
В комментариях по этой ссылке кто-то упоминает, что исправление будет выпущено в следующем выпуске среды выполнения asp.net... так это исправлено в .net 4.5? - person Chuck Pinkert; 09.10.2012
comment
Извините, но я не знаю. Вы можете попробовать установить его и посмотреть, обновлена ​​ли копия файла браузера на машине. Запустите diff на \Windows\Microsoft.NET\Framework[X1]\v[X2]\Config\Browsers\*. - person Brian; 09.10.2012