asp.net mvc ajax帖子返回404找不到

时间:2014-10-14 22:49:28

标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-4

我尝试使用jquery ajax函数执行ajax请求。我有一种非常奇怪的行为。我的文件夹结构是这样的:

folder structure

我的客户端ajax调用(在UserManagement / Index.cshtml中)如下所示:

var rolename = viewModel.roleName();
$.ajax({
     type: "POST",
     url: '@Url.Action("AddRole", "UserManagement")',
     contentType: "application/json; charset=utf-8",
     data: { rolename: rolename },
     success: function(data) {
         var role = new Role(rolename);
         model.addRole(role);
         model.appendItem("#accordion", role.getItem());
         viewModel.roleName("");            
     }
});

在我的UserManagementController.cs中,我有以下行动:

    // GET: /UserManagement/
    public ActionResult Index()
    {
        var serializer = new JavaScriptSerializer();
        var context = new ApplicationDbContext();
        var users = context.Users.ToList();
        var roles = context.Roles.ToList();


        ViewBag.Users = users;
        ViewBag.Roles = roles;
        return View();
    }

    //
    // POST: /UserManagement/AddRole
    [HttpPost]
    public string AddRole(string rolename)
    {

        Response.StatusCode = 200;
        return "gsfgdg";
    }

我已经尝试使用GET而不是POST或将AddRole更改为void类型以及其他任何内容,但我无法使其工作。我总是收到#34; 404找不到"。 有人可以帮忙吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

如果您删除Content-Type,您的案例将会有效。

<强> Case 1: If we use Content-Type: "application/json"

当您使用Content-Type of application / json请求时,在服务器端ScriptServices期望数据为JSON序列化字符串。

但是,我们可以看到"Invalid JSON primitive ***"通常是响应的结果。

在这里我们应该理解传递jQuery&#34;数据&#34;选项为&#34; {&#39; param&#39;:&#39; value&#39;}&#34;,而非{&#39; param&#39;:&#39; value&#39;}

因此,在您的情况下,要实现解决方案:我们需要提供data,如下所示

var rolename = viewModel.roleName();
$.ajax({
     type: "POST",
     url: '@Url.Action("AddRole", "UserManagement")',
     contentType: "application/json; charset=utf-8",
     data: "{ 'rolename':'" + rolename +"' }",
     success: function(data) {
         var role = new Role(rolename);
         model.addRole(role);
         model.appendItem("#accordion", role.getItem());
         viewModel.roleName("");            
     }
});

<强> Case 2: If we skip Content-Type: "application/json"

我们应该提供jQuery&#34;数据&#34;选项作为JSON对象{&#39; param&#39;:&#39; value&#39;}或{param:&#39; value&#39;}。 (正如你所做的那样)

希望有所帮助:)