Asp. Сеть, DropDownList, AutoPostBack и Google Chrome

Вы не должны фильтровать по деталям. Не поддерживается Вы можете фильтровать по связанным сущностям (и в вашем примере это работает с фильтрацией по контактной почте).

12
задан cgp 26 April 2009 в 03:42
поделиться

6 ответов

Существует известная несовместимость с Ajax.NET и Chrome & Safari 3.

Маленькие, быстрые тесты могут быть обманчивыми, потому что это, будет казаться, будет хорошо работать с существующей библиотекой Ajax.NET, как. Это вызвано тем, что этому удается выполнить первый запрос Ajax и сбои, когда это заканчивается, поэтому только, когда Вы попытаетесь выполнить, второе действие Ajax будет Вы замечать, что это перестало работать. При помещении управления UpdateProgress на странице Вы заметите, что после первого запроса Ваше управление UpdateProgress не исчезнет.

К счастью существует ответ!

Недавно было большое сообщение, поднятое, детализировав, что сделать, который можно найти здесь:

http://blog.turlov.com/2009/01/aspnet-ajax-compatibility-patch-for.html

Общая суть его - то, что и Chrome и Safari 3 сообщают о себе как WebKit в их строках userAgent.

Необходимо включить определенный JavaScript для помощи платформе Ajax.NET в распознавании основанных на WebKit браузеров, который похож на следующее:

if (typeof(Sys.Browser.WebKit) == "undefined") {
    Sys.Browser.WebKit = {};
}

if (navigator.userAgent.indexOf("WebKit/") > -1 ) {
    Sys.Browser.agent = Sys.Browser.WebKit;
    Sys.Browser.version = 
        parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name = "WebKit";
}

Необходимо добавить, что в файл JavaScript и ссылаются на него в ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/assets/javascript/WebKit.js" />
    </Scripts>
</asp:ScriptManager>

Обратите внимание, что можно сохранить WebKit.js в блоке и ссылке, которые при помощи ScriptReference отмечают подобный этому:

<asp:ScriptReference Assembly="Scripts" Name="Scripts.webkit.js" />

После того как Вы сделали все это, если при всем возможном использовании остановки WebForms и Ajax.NET и используют MVC и jQuery :)

15
ответ дан 2 December 2019 в 19:56
поделиться

Это происходит, потому что MicrosoftAjax.js делает определение браузера, и это неправильно обнаруживает Chrome как Safari. Для фиксации этого необходимо внести следующие изменения:

Добавьте новый тип браузера

Sys.Browser = {};
Sys.Browser.InternetExplorer = {};
Sys.Browser.Firefox = {};
Sys.Browser.Safari = {};
Sys.Browser.Opera = {};
Sys.Browser.Chrome = {};

Обновите если затем логика для поиска Chrome

else if (navigator.userAgent.indexOf(' Firefox/') > -1) {
    Sys.Browser.agent = Sys.Browser.Firefox;
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]);
    Sys.Browser.name = 'Firefox';
    Sys.Browser.hasDebuggerStatement = true;
}

else if (navigator.userAgent.indexOf(' Chrome/') > -1) {
    Sys.Browser.agent = Sys.Browser.Chrome;
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Chrome\/(\d+\.\d+)/)[1]);
    Sys.Browser.name = 'Chrome';
    Sys.Browser.hasDebuggerStatement = true;
}
else if (navigator.userAgent.indexOf(' AppleWebKit/') > -1) {
    Sys.Browser.agent = Sys.Browser.Safari;
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name = 'Safari';

Обязательно поместите проверку Chrome перед Safari. Если Вы нуждаетесь в помощи, заменяя сценарий Платформы Вашей пользовательской версией, считайте это.

ОБНОВЛЕНИЕ:

Я создал тестовую страницу и поместил следующие средства управления на нее:

<asp:ScriptManager ID="scriptManager1" runat="server" />
<asp:UpdatePanel ID="panel1" runat="server" ChildrenAsTriggers="true">
  <ContentTemplate>
    <asp:DropDownList ID="ddlTest" runat="server" AutoPostBack="true">
      <asp:ListItem Value="0" Text="Item 1" />
      <asp:ListItem Value="1" Text="Item 2" />
    </asp:DropDownList>
    <asp:Literal ID="litTest" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>

И записал следующий codebehind:

protected override void OnInit(EventArgs e)
{
    ddlTest.SelectedIndexChanged += new EventHandler(ddlTest_SelectedIndexChanged);
    base.OnInit(e);
}

void ddlTest_SelectedIndexChanged(object sender, EventArgs e)
{
    litTest.Text = "Selected: " + ddlTest.SelectedItem.Text;
}

Updatepanel хорошо работает в Chrome без модификации библиотеки Ajax. Так, я думаю, что что-то еще вызывает эту проблему. Вы испытываете необходимость для изоляции причины проблемы посредством процесса устранения. Запустите с чего-то простого как этот пример и работы до того, что у Вас есть часть за один раз.

2
ответ дан 2 December 2019 в 19:56
поделиться

Это не соответствующее предложение для использования MVC и jQuery вместо Ajax ASP.NET и WebForms. Нужно понять все за и против технологий и подходов для выбора из.

Во-первых, MVC является шаблоном разработки и не имеет никакого отношения к конкретным упомянутым платформам. Можно легко реализовать шаблон MVC с WebFroms. Существует много различных реализаций MVC для ASP.NET и WebForms.

Во-вторых, jQuery, будучи большой библиотекой JavaScript, не позволяет интеграции с и не усиливает сторону сервера функциональность ASP.NET, в противоположность платформе Ajax ASP.NET, которая прибывает стандарт с ASP.NET 3.5 + и полностью использует функции ASP.NET, такие как серверная разметка, управление ScriptManager, объединение сценария серверной стороны, локализация и глобализация, и т.д.

В-третьих, jQuery может легко использоваться в сочетании с платформами Ajax ASP.NET и ASP.NET, таким образом улучшающими клиентское программирование. Microsoft объявила, что jQuery будет поставлен со следующим ASP.NET 4.0, и на данный момент можно просто добавить его к проекту вручную.

0
ответ дан 2 December 2019 в 19:56
поделиться

Я только что столкнулся с подобной проблемой сегодня (хотя я не использовал Ajax) и нашел решение. См. Третий комментарий к этому сообщению в блоге .

0
ответ дан 2 December 2019 в 19:56
поделиться

У меня та же проблема. У меня есть выпадающий список внутри обратной передачи ajax, и мне нужно выполнить обновление при изменении выбранного индекса. Он также работает с базовой страницей в новом проекте.

После добавления сценария Webkit, упомянутого в других ответах, у меня все еще возникает та же проблема, и при запуске отладчика javascript в Chrome я получаю эту ошибку:

необработанное исключение ReferenceError: evt не определено

UPDATE: SOLUTION

Я обнаружил, что в моем случае это был CustomValidator, который вмешивался в обработчик событий. Установка false для параметра EnableClientScript устранила проблему.

0
ответ дан 2 December 2019 в 19:56
поделиться

Вы можете ознакомиться с решением

http://dotnetguts.blogspot.com/2009/05/dropdownlist-autopostback-problem-with.html

0
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: