[英]Why doesn't Ajax.BeginForm work in Chrome?
我正在使用c#.NET MVC2,我正在嘗試創建一個調用刪除數據庫記錄(RemoveRelation)的方法的ajax表單。 刪除記錄的過程按預期工作。 刪除記錄后,表單應調用一個javascript函數,從視覺中刪除記錄(RemoveRelation(10))。 這是通過一個AJAX調用來完成的,在Internet Explorer 9和Firefox 4上都按預期工作,但是由於某些原因,更新沒有通過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" }))
{ %>
上面的Begin Form代碼用於將關系添加到列表而不是刪除它們。 我再次強調,在IE9和FF4上,上面的工作正常,在chrome而不是添加一個並通過ajax更新,而是添加記錄兩次,再次刷新整個頁面而不是進行ajax更新。
為什么這會在chrome中崩潰?
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">
不記得我找到信息的原始網站,但我能從這個頁面得到。 祝好運!
您可以更新您的項目以使用asp.net MVC 3,在mvc 3中,jquery ajax是默認值
我發現了一個奇怪的問題解決方案。 我通過'a'標簽調用ajax表單提交,如下所示:
<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a>
出於某種原因,從'a'標簽調用'.submit()'會導致整個頁面刷新而不是ajax調用。 我通過使用以下代碼修復了該問題:
<input type='submit' value='Remove' />
當我需要在輸入中添加javascript命令以在刪除之前請求確認時,此解決方案也有效。 唯一的抱怨是我需要交換一些標記以確保我的按鈕發生在他們提交的表單中(我理解的並不總是在所有情況下都可能)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.