我试图通过传递一些参数的AJAX调用MVC控制器动作。 我有时 在此应用程序中执行此操作 ,并且效果很好。 我不知道为什么只有 这一个 无效。
function excluirDetalhe(button, tab) { var index = $(button).closest('tr').index(); var myTable = document.getElementById(tab); var id = myTable.rows[index].cells[0].innerHTML.trim(); $('#' + tab + ' tr:eq(' + index + ')').remove(); $.ajax({ traditional: true, url: "entidades/gravaCookie", type: 'post', data: { id: id, detalhe: "E" }, error: function (jqXHR, textStatus, errorThrown) { alert(errorThrown); } }); }
这是我的控制器方法:
public void gravaCookie(string id, string detalhe) { string key = "een_id"; if (detalhe.Equals("E")) key = "een_id"; if (detalhe.Equals("C")) key = "eco_id"; if (detalhe.Equals("B")) key = "eba_id"; cookie.Values.Add(key, id); }
提醒一下,我正在做我在其他Ajax调用中所做的事情,但是特别是 只有这一条 不起作用。 有人有什么主意吗?
始终使用Url.Action或Url.RouteUrlhtml helper方法来构建操作方法的url。无论您当前的页面/路径如何,它都会正确构建网址。
Url.Action
Url.RouteUrl
假设您的js代码在razor视图中,则可以直接使用Url.Action方法并将其分配给js变量。
Url.Actio
url: "@Url.Action("gravaCookie","entidades")",
假设您有这样的操作方法,它应该可以工作
[HttpPost] public ActionResult gravaCookie(string id,string detalhe) { // to do : Return something }
如果您的JavaScript位于单独的javascript文件中,则可以使用上述帮助方法在razor视图中构建url,并将其保存在您的外部js文件代码可以访问的变量中。 一定要确保使用javascript名称空间,以避免全局javascript变量可能出现的问题 。
@section Scripts { <script> var myApp = myApp || {}; myApp.Urls = myApp.Urls || {}; myApp.Urls.baseUrl = '@Url.Content("~")'; myApp.Urls.gravaCookieUrl = '@Url.Action("gravaCookie","entidades")'; </script> <script src="~/Scripts/PageSpecificExternalJsFile.js"></script> }
在PageSpecificExternalJsFile.js文件中,您可以像
PageSpecificExternalJsFile.js
var urlToGrava= myApp.Urls.gravaCookieUrl // Or With the base url, you may safely add the remaining url route. var urlToGrava2= myApp.Urls.baseUrl+"entidades/gravaCookie"; // Use urlToGrava now
编辑
如果您只关心站点的根/基URL,则可以简单地/用作URL的第一个字符。
/
var urlToGrava2= "/entidades/gravaCookie";