1

我正在尝试对 MVC 项目中的模型进行 AJAX 调用。我不断收到以下错误:

POST foobar/GetDate 405(不允许的方法)

(其中 'foobar' 是我的 MVC 项目的 localhost:port 格式。)

我还没有在项目中玩过路由,因为我不确定脚本的路由应该是什么样子。我现在知道如何正确路由视图。以下是一些代码片段:

在我的 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 文档。

现在,我将决定尝试将 jQuery 中的 AJAX 请求链接到我拥有的 C# 方法。我很肯定它与路由和语法有关。

提前致谢!

4

1 回答 1

7

为什么你[WebMethod]在 MVC 项目中有一个方法?

在 MVC 中,您可以在s中包含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 调用的回调函数。在(我们的 WebController 的基类)类中有一个JSON方法Controller可以做到这一点。

    public ActionResult GetMagician(string userName)
    {
       return Json(new { Name="Jon", Job="Stackoverflow Answering" },
                                  JsonRequestBehavior.AllowGet);
    }
于 2012-08-10T22:00:12.227 回答