Ajax.ActionLink 不发布
Posted
技术标签:
【中文标题】Ajax.ActionLink 不发布【英文标题】:Ajax.ActionLink is not POSTing 【发布时间】:2011-03-05 04:16:41 【问题描述】:我正在尝试通过 POST 而不是 GET 来导航到 MVC 操作。 (该操作是 DELETE,我不希望它可以通过外部链接访问。)
我正在使用由生成的网格中的链接
Ajax.ActionLink("Remove", "Delete", new saID = Model.Said, id = e.id , new AjaxOptions HttpMethod = "POST", Confirm = "Are you sure you want to delete this item?" )
生成以下 html:
<a href="/Equipment/Delete/102424/229933" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), insertionMode: Sys.Mvc.InsertionMode.replace, confirm: 'Are you sure you want to delete this item?', httpMethod: 'POST' );">Remove</a>
我的问题是,当我单击链接时,我通过 GET 而不是 POST 到达删除操作,并且没有出现“确认”对话框。我已经在谷歌上搜索了几个小时,并且一直缠绕在车轴上。我做错了什么?
【问题讨论】:
【参考方案1】:我想在接受的答案下将此作为评论添加,但不知何故没有选择将此作为评论输入,因此将其添加为答案
就我而言,我必须在 MicrosoftAjax.js 和 MicrosoftMvcAjax.js 之前添加“jquery.unobtrusive-ajax.min.js”,然后操作链接开始启动 ajax 请求。但这是一个 GET,我想要发布,所以我只是在“AjaxOptions”中添加了HttpMethod = "Post"
。就是这样。
【讨论】:
【参考方案2】:您的页面上可能还有其他一些 javascript 错误导致处理 AJAX POST 的 javascript 无法运行。在这种情况下,链接会退回到它的默认行为 (GET)。最简单的做法是使用 IE8 开发人员工具或 Firefox/Firebug(我更喜欢这些),并在页面加载或调用您的操作时查看控制台中是否有任何错误。如果您使用的是 IE,则需要使用 Internet Options -> Advanced
并取消选中 Disable script debugging
。
修复您的 javascript 错误,我认为它会开始工作。
【讨论】:
你的权利:我得到“Sys.Mvc”是未定义的——尽管我已经在我的 MasterPage 中包含了所有三个 JS 脚本文件(MicrosoftAjax、MicrosoftMvcAjax 和 jquery-1.4.1 -vsdoc) 我还需要做什么来定义 Sys.Mvc? @Dave - 您是否按顺序包括它们?Sys.Mvc
在 MicrosoftMvcAjax.js 中定义,但它是通过调用 MicrosoftAjax.js 中的方法来实现的
这似乎是问题所在。当我将提琴手连接到它时,只有三个脚本文件中的第一个(MicrosoftAjax.js)正在加载。我修复了这个问题,以便加载 MicrosoftMvcAjax.js(其中包含 Sys.Mvc 的定义),并且它确实起飞并运行 - 好吧,有点。我现在收到确认框,但没有收到删除表单。但我明天会调查的。以上是关于Ajax.ActionLink 不发布的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Ajax.ActionLink 更新整个页面而不仅仅是 UpdateTarget
@Ajax.ActionLink跳转页面的问题解决方案 MVC Ajax不支持问题
@Ajax.ActionLink跳转页面的问题解决方案 MVC Ajax不支持问题
使 html 链接 href 属性等于 Ajax.ActionLink