2012-08-10 2 views
1

Я пытаюсь сделать вызов AJAX модели, которую у меня есть в моем проекте MVC. Я постоянно получаю следующее сообщение об ошибке:Как разрешить доступ к методу в MVC?

POST foobar/GetDate 405 (Method Not Allowed)

(Где Foobar 'мой локальный:. Формат порта для проекта MVC)

Я не играл с маршрутизацией в проекте еще, как я Не знаю, как должен выглядеть маршрут к сценарию. Я знаю, как правильно маршрутизировать точки зрения в этот момент. Вот некоторые фрагменты кода:

В моей MVC проекта, у меня есть модель со следующим методом:

[WebMethod] 
public static string GetDate() 
{ 
    return DateTime.Now.ToString(); 
} 

В моем файле index.aspx, у меня есть этот код:

<button class="getDate">Get Date!</button> 
<div class="dateContainer">Empty</div> 

И в моем файле script.js, у меня есть этот код:

$.ajax({ 
    type: "POST", 
    url: "GetDate", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     // Replace text in dateContainer with string from GetDate method 
     $(".dateContainer").text(msg.d); 
    }, 
    complete: function (jqHXR, textStatus) { 
     // Replace text in dateContainer with textStatus 
     if (textStatus != 'success') { 
      $(".dateContainer").text(textStatus); 
     } 
    }, 
}); 

Моя конечная цель, чтобы отправить данные XML в мой метод в модели C#, то проанализировать и сохранить XML-документ.

Прямо сейчас, я соглашусь на попытку связать запрос AJAX в jQuery с методом C#, который у меня есть. Я уверен, что это имеет какое-то отношение к маршрутизации и синтаксису.

Заранее благодарен!

+0

'GetDate' должен быть методом контроллера, аннотированным с атрибутом HttpPost, который возвращает' Json (DateTime.Now) '. – sellmeadog

ответ

7

Почему у вас есть метод [WebMethod] в проекте MVC?

В MVC вы можете использовать методы action в своих controller. Вы можете назвать это с AJAX, а также

public class WebController : Controller 
{ 
    public ActionResult GetDate() 
    { 
     return Content(DateTime.Now.ToString()); 
    } 
} 

Вы можете вызвать его из JavaScript, как это (с JQuery)

$.get("@url.Action("GetDate","Web")",function(result){ 
    alert("The result from ajax call is "+result); 
}); 

Если вы делаете POST вызов метода, убедитесь, что для украшения ваш метод действия с атрибутом POST.

[HttpPost] 
    public ActionResult SaveUser(string userName) 
    { 
     //do something and return something 
    } 

Вы можете даже вернуть JSON из метода действия на функцию обратного вызова вашего AJAX вызова. Для этого используется метод JSON в классе Controller (базовый класс нашего WebController).

public ActionResult GetMagician(string userName) 
    { 
     return Json(new { Name="Jon", Job="Stackoverflow Answering" }, 
            JsonRequestBehavior.AllowGet); 
    } 
+0

Вы забыли о атрибуте [HttpPost] –

+0

@bobek: В примере использовался метод GET. Во всяком случае, я обновил ответ, чтобы включить подробные сведения о том, как обращаться с POST – Shyju

+0

@Shyju - сообщение действительно использовало запрос POST ajax. –

Смежные вопросы