2015-10-14 3 views
1

Я очень новичок в MVC, и у меня есть вопрос о вызовах MVC/AJAX.AJAX JQuery MVC5 404 error

Я пытаюсь получить данные обратно из MVC контроллер, но он продолжает говорить, что 404 ошибка

"NetworkError: 404 Not Found - http://localhost:6481/MDT/Detail?id=4935" 

Мой вызов Javascript является, как показано ниже, и я жёстко ID: 1245 в качестве теста. Я пытался переключить POST и GET, но все-таки не повезло

$.ajax({ 
    type: "GET", 
    url: 'MDT/Detail', 
    data: JSON.stringify({ 
     id: 1245 
    }), 
    contentType: "application/json", 
    dataType: "JSON", 
    success: function(data) { 
     console.log(data); 
    }, 
    fail: function(data) {} 
}); 

Я пробовал без JSON.stringify и ошибка все та же (404)

$.ajax({ 
    type: "GET", 
    url: 'MDT/Detail', 
    data: { 
     id: 1245 
    }, 
    contentType: "application/json", 
    dataType: "JSON", 
    success: function(data) { 
     console.log(data); 
    }, 
    fail: function(data) {} 
}); 

Ниже приведен код в контроллер ..

[Route("MDT/Detail/{id}")] 
    public JsonResult Detail(int? id) 
    { 
     ITS.Models.ComputerDetail cp = GetDataFromDatabase(id.Value); 

     return Json(cp, JsonRequestBehavior.AllowGet); 
    } 

Я проверил в Firebug и параметры передаются правильно следующим образом:

Я не мог понять, что я сделал неправильно. Не могли бы вы помочь мне с этой ошибкой?

Если я использовал (http://localhost:6481/MDT/Detail/1245), он отлично работает и возвращает объект JSON, но я не мог назвать этот метод MVC из JQuery AJAX.

+2

Если вы не stringify (и нет необходимости), то вам необходимо удалить 'CONTENTTYPE: "приложения/JSON",' –

+0

'URL:«/ MDT/Detail ', 'Вы можете попробовать добавить'/'ведущую косую черту перед MDT. – Jai

+0

И используйте 'url: '@ Url.Action (" Detail "," MDT ")',' так что вы создаете правильный URL-адрес, который будет '/ MDT/Detail' –

ответ

4

Вы должны отправить идентификатор не как параметр, а как часть URL-адреса. Измените код следующим образом:

$.ajax({ 
    type: "GET", 
    url: 'MDT/Detail/1245', 
    contentType: "application/json", 
    dataType: "JSON", 
    success: function(data) { 
     console.log(data); 
    }, 
    fail: function(data) {} 
}); 
1

Ответ просто не использовать

JSON.stringify({ id: 1245 }) 

просто передать

data:{ id: 1245 } 

с

Также POST запрос работает после добавления [HttpPost] Атрибут для контроллера действий.

И MVC маршрутизации по умолчанию {контроллер}/{действие}/{идентификатор} в соответствии с вашим Аякса называют Маршрут http://localhost:6481/MDT/Detail?id=4935 и идентификатор берется в качестве строки запроса параметра, так для этого вам нужно использовать маршрут в http://localhost:6481/MDT/493.

+0

, почему ????????????? это вызывает 404 ??? – Jai

+1

Это неверно и вызовет больше проблем. –

+0

Да, извините, но используйте его url как url: «MDT/Detail/'+ id, а не использовать id в« data », он принимает« id »в качестве арифметра строки запроса. Но MVC по умолчанию - {Controller}/{Action}/{id} –