У меня есть 2 проблемы, которые я вижу.
Сначала вы делаете POST
запрос к действию контроллера, у которого нет аннотации [HttpPost]
. Мне кажется, что вы получаете / выбираете данные, и запрос GET
был бы более уместным, поэтому я использовал это в приведенном ниже примере.
Во-вторых, вы не можете использовать @URL.Action("Division")
в javascript string (или в javascript в целом. Если вам действительно нужно, вы можете сохранить некоторые данные в скрытом div и получить значение с помощью javascript / jquery), как вы пытаетесь это сделать. На самом скрипте это будет отображаться, когда вы делаете запрос непосредственно к localhost:12345/@URL.Action("Division")
, который не является допустимым путем. См. Пример ниже:
Сценарий:
$(document).ready(function () {
$("#testButton").on("click", function () {
var OptionId = 1;
$.ajax(
{
type: 'GET',
//this url assumes your controller action is in HomeController.cs
url: '/Home/Division/' + OptionId,
dataType: 'json',
data: { DivisionId: OptionId },
success: function (data) {
alert("success");
},
error: function (ex) {
var r = jQuery.parseJSON(response.responseText);
alert("Message: " + r.Message);
alert("StackTrace: " + r.StackTrace);
alert("ExceptionType: " + r.ExceptionType);
}
});
});
});
HomeController.cs action:
public JsonResult Division(int DivisionId)
{
return Json(1, JsonRequestBehavior.AllowGet);
}
и, на мой взгляд, для тестирования:
<button type="button" id="testButton" class="btn btn-primary btn-lg">TEST BUTTON</button>
Вышеприведенный тест работает должным образом (получает параметр DivisionID
, возвращает данные о действии контроллера и сообщает клиенту об успешном выполнении). С изменением, описанным выше, точки останова в вашем действии контроллера будут достигнуты, когда вы указываете правильный путь и делаете соответствующий тип запроса. Надеюсь, это поможет.