Почему Ajax.BeginForm не работает в Chrome?
Я работаю с С#.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.
Почему это разрушается в хроме?
Ответы
Ответ 1
Я нашел странное решение проблемы. Я вызывал форму ajax submit через тег 'a' следующим образом:
<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a>
По какой-то причине вызов '.submit()' из тега 'a' был испорчен в chrome, что вызвало обновление полной страницы вместо вызова ajax. Я исправил проблему, используя вместо этого следующий код:
<input type='submit' value='Remove' />
Это решение также работало, когда мне нужно было добавить команды javascript на вход для запроса подтверждения перед удалением. Единственная проблема заключается в том, что мне нужно было обменивать некоторую разметку, чтобы гарантировать, что мои кнопки выполняются в форме, которую они представляют (что-то, что я понимаю, не всегда возможно во всех ситуациях).
Ответ 2
Есть проблема с 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, либо где-нибудь на вашей странице (желательно на главной странице, я добавил его ближе к концу), добавьте ссылку script:
<Scripts>
<asp:ScriptReference Path="webkit.js" />
</Scripts>
//OR
<script src="webkit.js">
Не могу вспомнить исходный сайт, на котором я нашел информацию, но это я смог получить от этой страницы. Удачи!
Ответ 3
вы можете обновить свой проект, чтобы использовать asp.net MVC 3, в mvc 3, jquery ajax является значением по умолчанию