Ajax调用MVC Controller返回" NOT FOUND"

时间:2015-12-17 19:38:04

标签: jquery ajax asp.net-mvc

我试图用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调用中的操作,但只有这一个特别无效。
有没有人有任何想法?

1 个答案:

答案 0 :(得分:7)

始终使用Url.ActionUrl.RouteUrl html帮助程序方法构建操作方法的URL。无论您当前的页面/路径如何,它都会正确构建网址。

假设您的js代码位于剃刀视图中,您可以直接使用Url.Actio n方法并将其分配给您的js变量。

url: "@Url.Action("gravaCookie","entidades")",

假设你有这样的行动方法

,它应该有用
[HttpPost]
public ActionResult gravaCookie(string id,string detalhe)
{
  // to do : Return something
}

如果你的javascript在一个单独的javascript文件中,你可以使用上面的帮助器方法在你的剃刀视图中构建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文件中,您可以像

一样阅读
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

修改

如果您只关心网站的根/网址,则可以使用/作为网址的第一个字符。

var urlToGrava2= "/entidades/gravaCookie";