我正在尝试对我在MVC项目中拥有的模型进行AJAX调用。我一直收到以下错误:
POST foobar / GetDate 405(方法不允许)
('foobar'是我的localhost: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);
}
},
});
我的最终目标是在C#模型中将XML数据发送到我的方法,然后解析并保存XML文档。
现在,我将尝试将jQuery中的AJAX请求链接到我拥有的C#方法。我很肯定它与路由和语法有关。
提前致谢!
答案 0 :(得分:7)
为什么MVC项目中有[WebMethod]
方法?
在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
(我们的WebController的基类)类中有一个Controller
方法来执行此操作。
public ActionResult GetMagician(string userName)
{
return Json(new { Name="Jon", Job="Stackoverflow Answering" },
JsonRequestBehavior.AllowGet);
}