У меня проблема. У меня есть этот раскрывающийся список:
@Html.DropDownListFor(m => m.SelectCountryId, Model.Countries, @Translator.Translate("PLEASE_SELECT"), new { id = "CountryID", @class = "form-control",ng_model="countryId", ng_change = "LoadRegions(countryId);", @required = "required" })
И мне нужно на ng_change, чтобы попасть в контроллер MVC, который выглядит так:
[AllowAnonymous]
public JsonResult GetRegions(int countryId) // return a JsonResult
{
IUserManager manager = UserFactory.GetUserManager(WebConfiguration.DefaultTerminalId);
var model = manager.GetRegions(countryId);
return Json(model, JsonRequestBehavior.AllowGet);
}
Это скрипт в угловом:
$scope.LoadRegions = function (countryId)
{
console.log("COUNTRY ID: ", countryId);
$http.post('/app/Account/GetRegions/'+ countryId).then(function (response)
{
alert(response);
});
}
Я получаю идентификатор страны, но в консоли я получаю эту ошибку:
POST http://localhost: 60789/app/Account/GetRegions/4 500 (Внутренняя ошибка сервера)
Маршрутизация по умолчанию в MVC позволяет {controller}/{action}/{id}
но ваш контроллер ожидает {controller}/{action}/{countryId}
.
Вы можете изменить свой вызов, чтобы он выглядел так:
GetRegions?countryId=XXX
Или измените свою подпись метода, чтобы она выглядела так:
public JsonResult GetRegions(int id)
Или, если вы действительно этого хотите, вы можете разместить этот маршрут в своем RouteConfig.cs
Редактирование: я просто понял, что вы вызываете это с помощью $http.post
но все в вашем коде подсказывает, что вы хотите, чтобы это было GET
, поэтому я бы изменил ваш угловой код на $http.get()
По внешнему виду есть несколько проблем в вашем javascript.
Попробуйте следующее.
$scope.LoadRegions = function (countryId)
{
var params = {};
params.countryId = countryId;
console.log("COUNTRY ID: ", countryId);
$http.post('/Account/GetRegions/', params).then(function (response)
{
alert(response);
});
}
Как вы видите, вы передаете объект params с идентификатором страны, вы также вызываете POST на стороне сервера → Seperate в папку углового app
.