2012-06-22 30 views
6

EDIT CUỐI CÙNG:MVC3 Ajax.BeginForm onSuccess Không Chạy trong Firefox

Sau khi làm theo câu trả lời từ Darin Dimitrov, tôi đã phát hiện ra rằng các vấn đề kết thúc lên được rằng cuộc gọi AJAX phương pháp của Controller UpdateForm() là trả về một chuỗi rỗng. Đây là một sửa đổi mà tôi thấy cần thiết một thời gian trước đây sau khi gặp một vấn đề khác. Việc truyền một chuỗi rỗng đã khiến trình phân tích cú pháp của Firefox bị sặc (trong khi Chrome và IE không quan tâm, rõ ràng) vì vậy tôi đã thay thế chuỗi rỗng bằng một số trống rỗng div.

Edit:

Nhờ gợi ý Darin Dimitrov của dưới đây, tôi đã phát hiện ra rằng lý do tôi đã gặp khó khăn là do một lỗi bị ném bất cứ khi nào hình thức trong câu hỏi đã được gửi đi.

JQuery Error

Lỗi đọc "Node không thể được chèn vào điểm quy định trong hệ thống cấp bậc". Điều này được ném mỗi và mỗi lần biểu mẫu được gửi. Tôi nhận thấy trong dữ liệu POST có vẻ như nghĩ rằng đây là một XMLHttpRequest. Đó có phải là nguyên nhân (yêu cầu AJAX được đề cập chỉ trả về HTML) không? Đây là dữ liệu POST từ Firebug:

POST Data 1

POST Data 2

POST Data 3

Lỗi này đọc "XML Parsing Error - Không Yếu tố Found".

FYI-HTML được trả lại luôn luôn là một chuỗi rỗng ...


Tôi có một ứng dụng MVC3 chạy trên IIS7. Trong một trong những quan điểm của tôi, tôi có một hình thức đang được xây dựng bằng cách sử dụng chức năng helper Microsoft HTML:

@using (Ajax.BeginForm("UpdateForm", new AjaxOptions { UpdateTargetId = "TargetDiv", InsertionMode = InsertionMode.InsertAfter, OnSuccess = "ClearTextBox" })) 
{ 
    @Html.TextArea("txtInput", new { id = "txtInput", cols = "20", rows = "5", wrap = "virtual" }) 
    <input id="send" class="button" type="submit" value="Send"/><br /> 
} 

này tạo ra HTML sau khi Controller cung cấp quan điểm này:

<form action="/RootName/ControllerName/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

Những gì tôi cơ bản cố gắng làm ở đây là lấy văn bản bên trong TextArea gọi txtInput và gắn nó vào cuối Div gọi TargetDiv bất cứ khi nào nút Send trên được nhấp rõ ràng ra các văn bản từ txtInput sau khi bổ sung hoàn thành bằng phương tiện của phương pháp ClearTextBox() (Javascript). Phần bổ sung luôn hoạt động trong mọi trình duyệt; và khi tôi chạy trong Internet Explorer hoặc Chrome, việc xóa văn bản chỉ hoạt động tốt. Tuy nhiên, Firefox dường như không muốn gọi phương thức ClearTextBox().

Firefox không tương thích với tùy chọn data-ajax-success này trong chữ ký biểu mẫu?


Những điều tôi đã thử

tôi thấy anh chàng này: Ajax.BeginForm doesn't call onSuccess

Giải pháp là để thêm kịch bản này:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 

tôi kêu gọi kịch bản này :

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

... nhưng tôi đã thử đổi nó chỉ trong trường hợp. Không vui.

tôi đã được yêu cầu thử thay đổi các cuộc gọi phương pháp để bao gồm dấu ngoặc đơn bởi một số người trong C# trong chat room để HTML ra như thế này:

<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox()" data-ajax-update="#chatText" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

Nhưng điều đó không giúp đỡ.

The folks trong C# Trò chuyện cũng đề nghị tôi thay lời gọi Javascript với một cảnh báo - một cái gì đó như thế này:

<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="alert('yo!')" data-ajax-update="#chatText" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

Trong khi Chrome bật hộp tin nhắn, Firefox không!

+0

"data-ajax-success" trông giống như thuộc tính tùy chỉnh chỉ cho biết phương thức cần gọi, vì vậy tôi nghi ngờ đó là vấn đề với chính thuộc tính. Tôi không chắc chắn những gì dev. các công cụ firefox có (tôi sử dụng Chrome chủ yếu), nhưng tôi sẽ kiểm tra xem nó có hiển thị bất kỳ lỗi JS nào ở nơi khác trong mã không. – justinb138

+0

Tôi đang sử dụng Firebug nhưng nó đã không chỉ ra bất cứ điều gì cho tôi ... = ( –

+0

Bạn có thể gửi cho bạn 'ClearTextBox()' phương pháp? Chỉ cần cố gắng này (file-> mới mvc3 dự án, sử dụng 'jquery.unobtrusive-ajax .min.js'), và hoạt động tốt trong FF Phiên bản của ClearTextBox của tôi là: 'function ClearTextBox() {$ (" # txtInput "). val (" ");}' –

Trả lời

1

Trạng thái không repro trong ứng dụng ASP.NET MVC 3 mới được tạo.

Bộ điều khiển:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult UpdateForm() 
    { 
     return Content(DateTime.Now.ToLongTimeString()); 
    } 
} 

View (~/Views/Home/Index.cshtml):

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    function ClearTextBox() { 
     $('textarea').val(''); 
    } 
</script> 

<form action="/Home/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post"> 
    <textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>  
    <input id="send" class="button" type="submit" value="Send"><br> 
</form> 

<div id="TargetDiv"></div> 

trình hoàn toàn tốt đẹp trong Chrome, FF và IE.

Ngoài ra, bạn có thể muốn đảm bảo rằng tiêu đề HTTP Phản hồi kiểu nội dung khớp với phản hồi thực tế mà bạn đang gửi. Ví dụ: tôi đã thấy rất nhiều người gửi tiêu đề phản hồi application/json với một số JSON không hợp lệ trong nội dung phản hồi tạo ra các trình phân tích cú pháp nhạy cảm hơn để bị nghẹt thở.

+0

Cảm ơn tất cả sự giúp đỡ của bạn! (Người đọc trong tương lai: xem các chỉnh sửa của tôi trong câu hỏi) –

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