Skip to main content
 首页 » 编程设计

javascript之对 C# Controller 方法进行 Ajax 调用

2024年01月29日34jyk

这是我名为“data handling.js”的 javascript 文件中的代码,位于名为“JS”的文件夹中:

document.getElementById('submit-new-project').addEventListener("click", function () { 
    var ProjectName = document.getElementById('new-project').value; 
    if (ProjectName) { 
        $.ajax({ 
            type: "POST", 
            url: "Controllers/HomeController/AddProject", 
            data: {"ProjectName": ProjectName}, 
            success: function () { 
                hideElement("add-button-popup"); 
                location.reload(); 
            }, 
            error: function (errorThrown) { 
                console.log(errorThrown) 
            } 
        }); 
    } 
    else { 
        alert("Text Field Must Not Be Empty"); 
    } 
}) 

这是我的 Controller 方法:

public partial class HomeController : Controller 
{ 
    [HttpPost] 
    public static void AddProject(string ProjectName) 
    { 
        using (AutomationMethodDirectoryEntities db = new AutomationMethodDirectoryEntities()) 
        { 
            try 
            { 
                PROJECT project = new PROJECT(); 
                project.ProjectName = ProjectName; 
                db.PROJECTS.Add(project); 
                db.SaveChanges();; 
            } 
            catch (Exception ex) 
            { 
                System.Diagnostics.Debug.WriteLine(ex.Message); 
            } 
        } 
    } 

Controller 方法位于“Adders.cs”中,它是“Controllers”文件夹中“HomeController.cs”的分部类。 “JS”和“Controllers”文件夹都位于项目的根级别。我已经尝试过此 ajax 调用的多种变体,但我最大的问题是 URL。无论我尝试什么,我总是收到 404 错误,因为服务器找不到请求的 URL。

我尝试将其更改为:

url: "Controllers/HomeController/AddProject" 
url: "/Controllers/HomeController/AddProject" 
url: "../Controllers/HomeController/AddProject" 
url: "Home/AddProject" 
url: "/Home/AddProject" 
url: "../Home/AddProject" 
url: "@(Url.Action(AddProject, HomeController))" 

而且我已经将“HomeController”与“Adders”进行了不同变体的交换。

我做错了什么?

有什么我需要添加/更改到我的 Controller 方法吗?

编辑

这是我尚未进行任何更改的“RouteConfig.cs”:

namespace RTCAD 
{ 
    public class RouteConfig 
    { 
        public static void RegisterRoutes(RouteCollection routes) 
        { 
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
            routes.MapRoute( 
                name: "Default", 
                url: "{controller}/{action}/{id}", 
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
            ); 
        } 
    } 
} 

请您参考如下方法:

当调用您的 AddProject 操作时,ASP.NET MVC 创建 Controller 的一个实例(使用 ControllerFactory),并且由于您的方法是静态的,因此它与任何实例,因此,它不会被 MVC 调用。

从方法声明中删除静态并使用 /Home/AddProject 作为 URL。