MVC 4 JsonResult — метод или операция не реализованы

У меня есть метод JsonResult, который я пытаюсь вызвать с помощью jQuery Ajax, но я получаю ошибку сервера 500 с сообщением об ошибке во время выполнения:

The method or operation is not implemented.

Это мой jQuery:

function submitPanel(value) {
    var panelIds = [];
    $('#' + value + ' select ').each(function () {
        panelIds.push($(this).val());
    });

    $.ajax({
        url: 'SavePanel',
        data: {
            chairId: panelIds[0],
            coPanelistId: panelIds[1]
        },
        type: 'json',
        success: function (data) {
            $('#InterviewManagementFrm').html(data);
        }
    });
}

PanelIds[0] и panelIds[1] имеют идентификаторы, потому что я использовал предупреждения для проверки.

public JsonResult SavePanel(Guid chairId, Guid coPanelistId)
        {
            DataLayer.InterviewManagement.InterviewManagementDataLayer DataLayer = new InterviewManagementDataLayer();
            //DataLayer.SavePanel(new Guid(chairId), new Guid(coPanelistId));

            // TODO: success/failure logic returned from data layer method
            var json_string = "{ success: \"true\" }";
            return Json(json_string, JsonRequestBehavior.AllowGet);
        }

Этот метод JsonResult находится в моем контроллере, он мало что делает, но когда он работает, он будет общаться с моим уровнем данных.

Я забыл написать строку кода или есть что-то еще, что мне не хватает?

заголовок ответа

Remote Address:::1:58719
Request URL:http://localhost:58719/InterviewManagement/SavePanel
Request Method:JSON
Status Code:500 Internal Server Error
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Connection:keep-alive
Content-Length:94
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:localhost:58719
Origin:http://localhost:58719
Referer:http://localhost:58719/InterviewManagement/InterviewManagementPage
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
chairId:6fe262de-a5b3-4c20-8b76-fab25ccd88ec
coPanelistId:72e42a86-cc98-45f0-9950-2b009ad0ec5d
Response Headersview source
Cache-Control:private
Connection:Close
Content-Length:10399
Content-Type:text/html; charset=utf-8
Date:Wed, 21 May 2014 14:11:34 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319

person nick gowdy    schedule 21.05.2014    source источник
comment
Я думаю, вы называете неправильный URL. Как называется контроллер с методом SavePanel?   -  person Ufuk Hacıoğulları    schedule 21.05.2014
comment
Действительно... SavePanel переводится в /SavePanel/Index под MVC   -  person Gone Coding    schedule 21.05.2014
comment
@UfukHacıoğulları, возможно, он зарегистрировал собственный маршрут для этого...   -  person haim770    schedule 21.05.2014
comment
@TrueBlueAussie, я думаю, в этом случае сервер вернет 404.   -  person haim770    schedule 21.05.2014
comment
Имя моего контроллера InterviewManagementController, но этот javascript находится в отдельном файле сценария. Там нет бритвы для меня.   -  person nick gowdy    schedule 21.05.2014
comment
Тогда URL-адрес будет выглядеть примерно так: /InterviewManagement/SavePanel? Есть ли у вас какая-либо пользовательская маршрутизация?   -  person Gone Coding    schedule 21.05.2014
comment
Мой код ошибки определенно 500 внутренняя ошибка сервера. Когда я смотрю на ответ, он говорит то, что я сказал в своем посте. Я подумал, может быть, мне нужен атрибут для моего метода, например эквивалент [httpget], но я использую глагол JSON, а не получение или сообщение.   -  person nick gowdy    schedule 21.05.2014
comment
Помимо проблемы с маршрутизацией, вы используете Json() неправильным образом, вы должны передать объект (а не свой собственный подготовленный JSON), и метод сериализует его в JSON. В вашем случае: return Json(new { success: true }, JsonRequestBehavior.AllowGet).   -  person haim770    schedule 21.05.2014
comment
Я предполагаю, что это InterviewManagementDataLayer отвечает за исключение.   -  person haim770    schedule 21.05.2014
comment
@DavidG, нет HTTP-глагола с именем JSON.   -  person haim770    schedule 21.05.2014
comment
Человек, который опубликовал ответ, но затем удалил его, был прав. Я изменил URL-адрес на URL-адрес: «/InterviewManagement/SavePanel», и теперь он работает. Я думаю, потому что я не могу использовать бритву, чтобы получить относительный путь, мне нужно жестко запрограммировать все это. Спасибо всем за помощь.   -  person nick gowdy    schedule 21.05.2014
comment
Я думаю, что The method or operation is not implemented вызвано использованием недопустимого HTTP-глагола (JSON вместо GET или POST), см. вызов jQuery.ajax. Спасибо @DavidG, который заметил это.   -  person haim770    schedule 21.05.2014
comment
Есть несколько приемов для внедрения текущего корневого пути сервера в ваш jquery (через введенные атрибуты страницы с использованием @Url.Content("~/")), чтобы он также работал в веб-приложениях.   -  person Gone Coding    schedule 21.05.2014
comment
@Ufuk Hacıoğulları: вы также можете восстановить свой ответ (и настроить type), как вы сначала это сделали :)   -  person Gone Coding    schedule 21.05.2014
comment
@TrueBlueAussie Нет, ты меня обидел :/   -  person Ufuk Hacıoğulları    schedule 21.05.2014
comment
@Ufuk Hacıoğulları: Не будь ребенком. Примите мой голос как мужчина :)   -  person Gone Coding    schedule 21.05.2014


Ответы (2)


Вы пишете свой ajax неправильно. Вы не определили тип .ajax, будь то Post или Get. Попробуйте написать свой ajax следующим образом:

   $.ajax({
   url: '/InterviewManagement/SavePanel',
   dataType: "json",
    type: "POST", 
    data: {
        chairId: panelIds[0],
        coPanelistId: panelIds[1]
    },
    success: function (data) {
        $('#InterviewManagementFrm').html(data);
    }
});

Надеюсь, что это поможет вам.

person Naveen Chandra Tiwari    schedule 21.05.2014

Мне пришлось указать полный URL-адрес, чтобы он работал. Поскольку мой JS находится во внешнем сценарии, у меня нет бритвы, чтобы получить виртуальный путь. Я закончил тем, что сделал это изменение.

$.ajax({
            url: '/InterviewManagement/SavePanel',
            data: {
                chairId: panelIds[0],
                coPanelistId: panelIds[1]
            },
            type: 'json',
            success: function (data) {
                $('#InterviewManagementFrm').html(data);
            }
        });

Спасибо всем за помощь.

person nick gowdy    schedule 21.05.2014
comment
Как заметил @DavidG, вы используете type: 'json' неправильно, нет HTTP-глагола «JSON», измените его на type: 'post'. - person haim770; 21.05.2014
comment
Для поддержки различных путей хостинга введите корневой путь в главную страницу (например, в качестве атрибута данных) с помощью @Url.Content("~/"). Затем ваш JS может подобрать его для любых запросов и добавить к URL-адресам. - person Gone Coding; 21.05.2014