2015-12-09 4 views
0

Ниже мой вызов Ajax.Ajax звонок не работает с asp.net mvc

$.ajax({ 
    url: '@Url.Action("GetCities", "People")', 
    type: 'GET', 
    dataType: 'JSON', 
    contentType: 'application/json; charset=utf-8', 
    data: {'id' : id }, 
    success: function (cities) { 
     alert('success'); 
    }, 
    error:function(err, result){ 
     alert('error'); 
    } 
}); 

& это мой метод действия.

public ActionResult GetCities(int id) 
    { 
     var cities = StateDB.GetCities().Where(c => c.StateId == id); 
     return Json(cities, JsonRequestBehavior.AllowGet); 
    } 

При попытке открыть с помощью http://localhost/People/GetCities/2, он работает, но он не работает с выше вызова Ajax. Это дает мне ошибку 404 «Не найдено». Что я здесь делаю неправильно?

+1

Вы должны удалить опцию 'contentType' и использовать' data: {id: id} '. Используете ли вы области в своем приложении? –

+0

Если возможно, покажите конфигурацию маршрута. –

+1

Имеет ли ваш веб-API префикс '/ api'? –

ответ

0

Проблема была в внешнем файле js. Двигатель Razor не работает с внешним js-файлом, поэтому URL-адрес неверен. Он работает, если я использую тот же код. Спасибо всем, кто мне помог.

0

На самом деле, наоборот: внешние JS-файлы не могут работать с движком Razor (это совершенно очевидно, если вы думаете об этом). Если вы установите переменную javascript в @ Url.Action ('', '',) внутри представления (=, которое покрывается движком Razor), вы можете ссылаться на эту переменную во внешнем скрипте.

Внутри вид:

<script> 
var ajaxUrl = '@Url.Action("GetCities", "People")'; 
</script> 

Внутри вашего внешнего скрипта (предполагается, что сценарий выше ссылки, а):

$.ajax({ 
url: ajaxUrl, 
type: 'GET', 
dataType: 'JSON', 
contentType: 'application/json; charset=utf-8', 
data: {'id' : id }, 
success: function (cities) { 
    alert('success'); 
}, 
error:function(err, result){ 
    alert('error'); 
} 

});

Это не лучшая практика (потому что ваш внешний скрипт имеет зависимость от переменной, которая может существовать или не существовать).

+0

Итак, каковы ваши предложения по этому поводу? Я не могу поместить все эти (если их много) javascript кодов в поле зрения. – smokingkills

+0

Если вы хотите использовать Razor для генерации URI для вас, вы не можете многое сделать. Например, вы можете объявить корневую переменную, которую вы можете использовать во внешних скриптах, чтобы создать остальную часть пути (что-то вроде url: rootVariable + «People/GetCities») или использовать какой-то JSP-метод помощника. – hbulens

Смежные вопросы