繁体   English   中英

为什么Ajax.BeginForm不能在Chrome中运行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM