簡體   English   中英

MVC3 Ajax.BeginForm OnSuccess無法在Firefox中運行

[英]MVC3 Ajax.BeginForm OnSuccess Doesn't Run in Firefox

最終編輯:

UpdateForm() Darin Dimitrov的回答后,我發現問題最終是對Controller的方法UpdateForm()的AJAX調用返回一個空字符串。 這是我在遇到不同問題后不久前發現必要的修改。 傳遞一個空字符串導致Firefox的解析器窒息(而Chrome和IE顯然不在乎),所以我用空div替換了空字符串。

編輯:

感謝Darin Dimitrov在下面提出的建議,我發現我遇到麻煩的原因是每當提交相關表格時都會拋出錯誤。

JQuery錯誤

錯誤顯示“節點無法插入層次結構中的指定點”。 每次提交表單時都會拋出此內容。 我在POST數據中注意到它似乎認為這是一個XMLHttpRequest。 這是原因(有問題的AJAX請求只是返回HTML)? 這是來自Firebug的POST數據:

POST數據1

POST數據2

POST數據3

此錯誤顯示“XML解析錯誤 - 未找到元素”。

僅供參考 - 返回的HTML始終為空字符串...


我有一個在IIS7上運行的MVC3應用程序。 在我的一個視圖中,我有一個使用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 />
} 

當Controller提供此視圖時,這將生成以下HTML:

<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>

什么我基本上想在這里做的是把里面的文字TextArea稱為txtInput ,並將它添加到年底Div稱為TargetDiv每當Send上述按鈕被點擊,並從清理出來的文字txtInput后的追加是借助於完成ClearTextBox()方法(Javascript)。 追加始終適用於每個瀏覽器; 當我在Internet Explorer或Chrome中運行時,文本的清除工作正常。 但是,Firefox似乎不想調用ClearTextBox()方法。

Firefox是否與表單簽名中的data-ajax-success選項不兼容?


我試過的事情

我找到了這個人: Ajax.BeginForm沒有調用onSuccess

解決方案是添加此腳本:

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

我在調用這個腳本:

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

...但我嘗試將其換掉以防萬一。 沒有快樂。

我被要求嘗試更改方法調用以包含C#聊天室中的一些人的括號,以便HTML如下所示:

<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>

但這沒有幫助。

C#Chat中的人還建議我用警報替換Javascript調用 - 如下所示:

<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>

當Chrome彈出消息框時,Firefox不會!

狀態no repro在新創建的ASP.NET MVC 3應用程序中。

控制器:

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

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

查看( ~/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>

在Chrome,FF和IE中完美運行。

此外,您可能希望確保Content-Type響應HTTP標頭與您要發送的實際響應相匹配。 例如,我看到很多人在響應主體中發送帶有一些無效JSON的application/json響應頭,這會產生更敏感的解析器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM