C# MVC3 Ajax.BeginForm OnSuccess不';不要在Firefox中运行

C# MVC3 Ajax.BeginForm OnSuccess不';不要在Firefox中运行,c#,ajax,asp.net-mvc-3,firefox,forms,C#,Ajax,Asp.net Mvc 3,Firefox,Forms,最终编辑: 在遵循Darin Dimitrov的回答之后,我发现问题最终在于对控制器的方法UpdateForm()的AJAX调用返回了一个空字符串。这是一个修改,我觉得有必要在一段时间前经历了一个不同的问题。传递一个空字符串会导致Firefox的解析器阻塞(而Chrome和IE显然并不在意),所以我用一个空的div替换了这个空字符串 编辑: 多亏了Darin Dimitrov在下面的建议,我发现我遇到问题的原因是每当提交相关表单时都会抛出错误 错误为“无法在继承人权限中的指定点插入节点”。每次

最终编辑:

在遵循Darin Dimitrov的回答之后,我发现问题最终在于对控制器的方法
UpdateForm()
的AJAX调用返回了一个空字符串。这是一个修改,我觉得有必要在一段时间前经历了一个不同的问题。传递一个空字符串会导致Firefox的解析器阻塞(而Chrome和IE显然并不在意),所以我用一个空的
div
替换了这个空字符串

编辑:

多亏了Darin Dimitrov在下面的建议,我发现我遇到问题的原因是每当提交相关表单时都会抛出错误

错误为“无法在继承人权限中的指定点插入节点”。每次提交表单时都会抛出此消息。我在POST数据中注意到,它似乎认为这是一个XMLHttpRequest。这就是原因(所讨论的AJAX请求只是返回HTML)?以下是Firebug发布的数据:

此错误为“XML解析错误--未找到元素”

仅供参考-返回的HTML始终为空字符串


我有一个在IIS7上运行的MVC3应用程序。在我的一个视图中,我使用Microsoft HTML helper函数构建了一个表单:

@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 />
} 
我将此脚本称为:

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


但那没用

C#Chat中的人还建议我用一个警报来代替Javascript调用,类似这样:

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

新创建的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
):


函数ClearTextBox(){
$('textarea').val(“”);
}

在铬合金、FF和IE中工作非常出色


此外,您可能希望确保内容类型响应HTTP头与您正在发送的实际响应相匹配。例如,我看到很多人发送
应用程序/json
响应头时,响应体中包含一些无效的json,这会导致更敏感的解析器阻塞。

“data ajax success”看起来像一个自定义属性,只是告诉它调用什么方法,所以我怀疑这是属性本身的问题。我不确定firefox有什么开发工具(我主要使用Chrome),但我会检查一下,看看代码中其他地方是否有JS错误。我正在使用Firebug,但它没有向我指出任何东西=(您可以发布
ClearTextBox()
方法吗?刚刚尝试了这个(文件->新的mvc3项目,使用了
jquery.unobtrusive ajax.min.js
),在FF中运行良好。我的ClearTextBox版本是:
函数ClearTextBox(){$(“#txtInput”).val(“”;)
这是我的方法……但我应该注意,我可以在同一页面的其他地方调用这个方法,它在Firefox中工作,只是在AJAX调用成功时没有调用它。
函数ClearTextBox(){$('textarea').val(“”);}
(页面上只有
textarea
)你能展示一下你的
UpdateForm
操作吗?你还提到你在使用FireBug,但你没有说你在FireBug中看到了什么?你看到AJAX请求被触发了吗?你看到请求了吗?你看到响应了吗?你看到错误了吗?我刚刚测试了代码,它在FireFox中运行得非常好。谢谢你的帮助!(未来读者:请参阅问题中我的编辑)