Ajax-вызов контроллера MVC возвращает "НЕ НАЙДЕНО"

Я пытаюсь вызвать действие контроллера MVC с передачей AJAX некоторых параметров.
Я делал это иногда в этом приложении, и он отлично работает.
Я понятия не имею, почему только ЭТОТ ОДИН не работает.

 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 ответ

Решение

Всегда используйте Url.Action или же Url.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

РЕДАКТИРОВАТЬ

Если вы просто заботитесь о корневом / базовом URL сайта, вы можете просто использовать / как первый символ вашего URL.

var urlToGrava2= "/entidades/gravaCookie";
Другие вопросы по тегам