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";