2017-05-04 107 views
2

我有一个相当简单的.NET应用程序,只有一个页面。AJAX 404错误 - 调用控制器动作.Net MVC

Structure of files][1

的代码是指当通过调用相关负责人得到的代码,并使用脚本打印出来跑填充表。

我的控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web.Mvc; 
using techTest3.Models; 

namespace techTest3.Controllers 
{ 
    public class HomeController : Controller 
    { 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public JsonResult GetAllPeople() 
    { 
     TechTestEntities testTechObj = new TechTestEntities(); 
     var people = testTechObj.People.Select(x => new 
     { 
      Id = x.PersonId, 
      Name = x.FirstName, 
      Surname = x.LastName, 
      Valid = x.Var1, 
      Authorised = x.Var2 
     }).ToList(); 
     return Json(people, JsonRequestBehavior.AllowGet); 
    } 

} 
} 

我的观点:

@{ 
ViewBag.Title = " Showing Data Using jQuery Ajax Call JSON in ASP.NET MVC"; 
} 
<h1>Showing Data Using jQuery Ajax Call JSON in ASP.NET MVC </h1> 

<div> 
    <table id = "tblEmployee" class = "tblEmployee" > 
    <thead> 
    <!---<img src = "~/Loading.gif" alt = "Loading" id = "imgLoading" class = "Load" />--> 
    </thead> 

     <tbody> 
     </tbody> 
     </table> 
     </div> 

    <script src="~/Scripts/jquery-1.10.2.min.js"></script> 
    <script type = "text/javascript" > 
    $(document).ready(function() 
    { 
     $("#tblEmployeetbodytr").remove(); 
     $.ajax 
     ({ 
      type: 'POST', 
      url: '@Url.Action("GetAllPeople")', 
      dataType: 'json', 
      data: {}, 
      success: function(data) 
      { 
      $("#imgLoading").hide(); 
      var items = ''; 
      var rows = "<tr>" + 
        "<th align='left' class='EmployeeTableTH'>Employee ID</th><th align='left' class='EmployeeTableTH'>Name</th><th align='left' class='EmployeeTableTH'>Project Name</th><th align='left' class='EmployeeTableTH'>Manager Name</th><th align='left' class='EmployeeTableTH'>City</th>" + 
        "</tr>"; 
      $('#tblEmployeetbody' 

).append(rows); 

     $.each(data, function(i, item) 
     { 
      var rows = "<tr>" + 
       "<td class='EmployeeTableTD'>" + item.Id + "</td>" + 
       "<td class='EmployeeTableTD'>" + item.FirstName + "</td>" + 
       "<td class='EmployeeTableTD'>" + item.LastName + "</td>" + 
       "<td class='EmployeeTableTD'>" + item.Var1 + "</td>" + 
       "<td class='EmployeeTableTD'>" + item.Var2 + "</td>" + 
       "</tr>"; 
      $('#tblEmployeetbody').append(rows); 
     }); 
     }, 
     error: function(ex) 
     { 
     var r = jQuery.parseJSON(response.responseText); 
     alert("Message: " + r.Message); 
     } 
     }); 
     return false; 
     }); </script> 
     <style type = "text/css" > 
     </style> 

哪里TechTestEntities是引用一个SQL数据库的EDMX模型的名称。

当我调试应用程序,我得到一个404找不到错误。这发生在url:'<%= Url.Action(“GetAllPeople”,“HomeController”)%>'和url:'/ Controllers/HomeController/GetAllPeople',还有url:'@ Url.Action(“/ HomeController的.cs/GetAllPeople“)。

有什么明显的我失踪了吗?请记住我在回答时对AJAX和Javascript非常陌生。

+2

您需要用'[HttpPost]'装饰'GetAllPeople'动作,否则它只会响应GET请求 –

+1

在帮助程序中放下单词“Controller”@ Url.Action(“GetAllPeople”,“Home” )' – Jasen

+1

此外,由于标记为'HttpPost'的JSON控制器返回'JsonResult',所以删除'JsonRequestBehavior.AllowGet'和'return Json(people)'。 –

回答

2

这里的工作演示:https://dotnetfiddle.net/kE5Px7

我只是一个变化,增加了HttpPost属性你打电话的动作。

[HttpPost] 
public JsonResult GetAllPeople() 

,并作为意见提出,动作返回此:

return Json(people); 

AJAX调用的URL是一样的:url: '@Url.Action("GetAllPeople")'

+0

仍然有我的问题,但我会看看这个例子,谢谢。 – peanut

+0

您在代码中共享的视图是“Index.cshtml”吗? –

+0

是的,它是。这是启动页面 – peanut

0

只需要做一个更改就是将HomeController更改为Home。我们在通话中只使用控制器名称。例如'/ Home/GetAllPeople'。写'/ Controllers/HomeController/GetAllPeople'是错误的。