Как разместить или попасть в контроллер MVC?

0

У меня проблема. У меня есть этот раскрывающийся список:

  @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 (Внутренняя ошибка сервера)

Теги:
asp.net-mvc

2 ответа

1
Лучший ответ

Маршрутизация по умолчанию в MVC позволяет {controller}/{action}/{id} но ваш контроллер ожидает {controller}/{action}/{countryId}.

Вы можете изменить свой вызов, чтобы он выглядел так:

GetRegions?countryId=XXX

Или измените свою подпись метода, чтобы она выглядела так:

public JsonResult GetRegions(int id)

Или, если вы действительно этого хотите, вы можете разместить этот маршрут в своем RouteConfig.cs

Редактирование: я просто понял, что вы вызываете это с помощью $http.post но все в вашем коде подсказывает, что вы хотите, чтобы это было GET, поэтому я бы изменил ваш угловой код на $http.get()

  • 0
    могу я задать тебе еще один вопрос?
  • 0
    @ Нет, продолжай
Показать ещё 3 комментария
1

По внешнему виду есть несколько проблем в вашем 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню