javascript AJAX 404错误-调用控制器操作.Net MVC

rqdpfwrv  于 2022-12-10  发布在  Java
关注(0)|答案(3)|浏览(153)

我有一个相当简单的.NET应用程序,只有一个页面。

该代码旨在通过调用相关控制器获取代码并使用脚本将其打印出来,从而在运行时填充一个表。
我的控制器:

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:“/控制器/家庭控制器/获取所有人员”,以及URL:'@网址。操作(“/家庭控制器.cs/获取所有人”)。
有什么明显的我错过了吗?请记住,我是非常新的 AJAX 和Javascript时回答。

ktca8awb

ktca8awb1#

下面是一个工作演示:https://dotnetfiddle.net/kE5Px7
我只是做了一个更改,将HttpPost属性添加到要调用的操作中。

[HttpPost]
public JsonResult GetAllPeople()

正如注解中所建议的,该操作返回以下内容:

return Json(people);

AJAX 调用的URL保持不变:url: '@Url.Action("GetAllPeople")' .

siv3szwd

siv3szwd2#

您只需要做一个更改,即将HomeController更改为Home在调用中仅使用控制器名称例如'/Home/GetAllPeople'编写为'/Controllers/HomeController/GetAllPeople'是错误

qlckcl4x

qlckcl4x3#

我发现这个帖子是基于这个问题,但是解决方案不起作用。对我来说, AJAX 调用不会找到控制器。调用以前工作过,有一天它就停止工作了。我修改了控制器,添加了新的方法,并重命名了AJAX调用,仍然什么都没有。
唯一对我有效的解决方案是创建一个新的控制器,复制所有的方法并重命名 AJAX 调用。Visual Studio和编译版本中出现了一些错误,但我不知道是什么。我只是想发布这种情况,以防有人避免我花了几个小时来调试这个问题。
快乐编码!
引用的视频正是发生在我身上的事情:https://www.youtube.com/watch?v=we1_aL1KYiE

相关问题