2012-02-16 30 views
14

Tôi đang làm việc với C# .NET MVC2 và tôi đang cố gắng tạo biểu mẫu ajax gọi một phương thức xóa một bản ghi cơ sở dữ liệu (RemoveRelation). Quá trình xóa bản ghi đang hoạt động như dự định. Sau khi bản ghi bị xóa, biểu mẫu sẽ gọi hàm javascript loại bỏ bản ghi khỏi hình ảnh (RemoveRelation (10)). Điều này được thực hiện thông qua một cuộc gọi AJAX trên Internet Explorer 9 và Firefox 4 tất cả đang hoạt động như dự định tuy nhiên trên Chrome vì một số lý do bản cập nhật không xảy ra một cuộc gọi AJAX và toàn bộ trang đang làm mới khi biểu mẫu xóa bản ghi đang được được gửi (điều này không chính xác vì biểu mẫu được cho là được tạo bằng chức năng AJAX). Đây là mã mà tôi đang tạo biểu mẫu:Tại sao Ajax.BeginForm không hoạt động trong Chrome?

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

Ngoài ra trên Chrome, tôi có một vấn đề khác với Ajax.BeginForm riêng biệt.

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

Mã mẫu bắt đầu ở trên được sử dụng để thêm mối quan hệ vào danh sách thay vì xóa chúng. Một lần nữa tôi nhấn mạnh, trên IE9 và FF4 ở trên là làm việc như dự định, trên chrome thay vì thêm một và cập nhật thông qua ajax, nó thay vì thêm bản ghi hai lần và một lần nữa làm mới toàn bộ trang thay vì thực hiện cập nhật ajax.

Tại sao tính năng này bị hỏng trong chrome?

+0

bạn có thể muốn xem xét sử dụng http://jquery.malsup.com/form/ thay vì – Manatherin

Trả lời

1

Tôi đã tìm thấy một giải pháp lạ cho vấn đề. Tôi đã kêu gọi các hình thức ajax của trình thông qua một 'a' tag như vậy:

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

Đối với một số lý do gọi '.submit()' từ 'a' thẻ đã rối tung lên trong chrome gây ra một refresh trang đầy đủ thay vì gọi ajax. Tôi đã khắc phục sự cố bằng cách sử dụng mã sau đây thay thế:

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

Giải pháp này cũng hoạt động khi tôi cần thêm xác nhận javascript vào đầu vào để yêu cầu xác nhận trước khi xóa. Điều duy nhất là tôi cần trao đổi xung quanh một số đánh dấu để đảm bảo rằng các nút của tôi đang diễn ra trong biểu mẫu mà họ đang gửi (điều mà tôi hiểu không phải lúc nào cũng có thể trong mọi tình huống).

+2

Bạn có thể giữ nó. Bạn chỉ cần trả về false ở cuối onclick (vì vậy nó sẽ là 'onclick =" javascript: $ ('# ajaxform'). Submit(); return false; "'). Lý do là các thẻ 'a' làm cho trình duyệt điều hướng đến liên kết (ngay cả khi nó không đi đâu) và trả về false chỉ ngăn chặn hành động trình duyệt mặc định xảy ra. Nguồn: http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html – SPFiredrake

12

Có vấn đề với Microsoft AJAX và một số trình duyệt webkit nhất định. Tôi đã gặp vấn đề này một mình trước đây, và việc sửa chữa khá đơn giản. Tạo một file webkit.js và đưa chúng vào các nội dung:

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'; 
} 

Sau đó, hoặc trong ScriptManager của bạn hoặc nơi nào đó trong trang của bạn (tốt nhất là trong một trang chủ, tôi đã thêm nó gần cuối), thêm các tài liệu tham khảo kịch bản:

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

Không thể nhớ trang web gốc mà tôi đã tìm thấy thông tin, nhưng điều này tôi có thể nhận được từ this page. Chúc may mắn!

+0

crap, tôi nghĩ điều này đã hiệu quả nhưng hiện tại tôi phát hiện ra rằng nó không hoạt động, nó vẫn làm mới toàn bộ trang. –

+0

Xem bạn có gặp phải bất kỳ lỗi XmlHttpRequest nào trong bảng điều khiển không. Bảng điều khiển Chrome giống Firebug nhưng được tích hợp sẵn và (IMO) dễ sử dụng hơn. Đó là cách tôi phát hiện ra vấn đề ban đầu, bởi vì nó đã thất bại trong một trong các tệp .NET AJAX JS (ngay ở đầu tệp). – SPFiredrake

+0

Tôi không nhận được bất kỳ lỗi XmlHttpRequest hoặc bất kỳ lỗi hoặc cảnh báo nào cho vấn đề đó. –

1

bạn có thể cập nhật dự án của bạn để sử dụng asp.net MVC 3, trong MVC 3, jquery ajax là mặc định

+0

Nhiều như tôi muốn cập nhật MVC ở giai đoạn này trong dự án là không thể. Đó là một dự án làm việc và thay đổi bất cứ điều gì trong khuôn khổ có nghĩa là phải kiểm tra lại mọi hình thức và có khá nhiều trong số đó. Ông chủ của tôi sẽ không vui chút nào để dành một tháng thử nghiệm nữa. –

Các vấn đề liên quan