Почему Ajax.BeginForm не работает в Chrome? - PullRequest
14 голосов
/ 16 февраля 2012

Я работаю с c # .NET MVC2 и пытаюсь создать форму ajax, которая вызывает метод, удаляющий запись в базе данных (RemoveRelation). Процесс удаления записи работает как задумано. После удаления записи форма должна вызвать функцию javascript, которая удаляет запись из визуальных элементов (RemoveRelation (10)). Это делается с помощью вызова AJAX, который в Internet Explorer 9 и Firefox 4 все работает, как и предполагалось, однако в Chrome по какой-то причине обновление не происходит через вызов AJAX, и вся страница обновляется, когда выполняется форма для удаления записи. отправлено (это неверно, так как форма предположительно генерируется с функциональностью AJAX). Это код, с помощью которого я генерирую форму:

 <% using (Ajax.BeginForm("RemoveRelation", "Relations",
       new AjaxOptions { OnSuccess = "function() { RemoveRelation(10); } ", InsertionMode = InsertionMode.Replace, UpdateTargetId = "Relation10" },
       new { id = "DeleteForm10" }))
   { %>

Кроме того, в Chrome у меня есть другая проблема с отдельным Ajax.BeginForm.

<% using (Ajax.BeginForm("AddRelation", "Relations", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "AddRelation" }, new { id = "AddRelationForm" }))
  { %>

Приведенный выше код начальной формы используется для добавления отношений в список вместо их удаления. Еще раз подчеркиваю, что в IE9 и FF4 вышеприведенное работает должным образом, в chrome вместо добавления одного и обновления через ajax вместо этого добавляется запись дважды и снова обновляется вся страница, а не обновление ajax.

Почему это ломается в хром?

Ответы [ 3 ]

12 голосов
/ 17 апреля 2012

Существует проблема с Microsoft AJAX и некоторыми браузерами webkit. Я сам столкнулся с этой проблемой некоторое время назад, и исправить это довольно просто. Создайте файл webkit.js и поместите его в содержимое:

Sys.Browser.WebKit = {}; //Safari 3 is considered 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';
}

Затем либо в вашем ScriptManager, либо где-нибудь на вашей странице (желательно на главной странице, я добавил ее в конце), добавьте ссылку на скрипт:

<Scripts>
    <asp:ScriptReference Path="webkit.js" />
</Scripts>
//OR
<script src="webkit.js">

Не могу вспомнить оригинальный сайт, на котором я нашел информацию, но это мне удалось получить с этой страницы . Удачи!

1 голос
/ 15 мая 2012

Я нашел странное решение проблемы. Я вызывал отправку формы ajax через тег 'a', например:

<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a>

По какой-то причине при вызове '.submit ()' из тега 'a' произошел сбой в Chrome, что вызвало полное обновление страницы вместо вызова ajax. Я исправил проблему, используя следующий код:

<input type='submit' value='Remove' />

Это решение также работало, когда мне нужно было добавить команды javascript к входу, чтобы запросить подтверждение перед удалением. Единственный недостаток в том, что мне нужно было поменять местами какую-то разметку, чтобы убедиться, что мои кнопки выполнялись в той форме, которую они отправляли (что, как я понимаю, не всегда возможно во всех ситуациях).

1 голос
/ 15 мая 2012

вы можете обновить ваш проект, чтобы использовать asp.net MVC 3, в рамках mvc 3 по умолчанию используется jquery ajax

...