这是我的javascript文件中名为“data handling.js”的代码,位于名为“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");
}
})
这是我的控制器方法:
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);
}
}
}
控制器方法位于“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”换成了不同的版本。
我做错了什么?
我需要添加/更改控制器方法吗?
修改
这是我的“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 }
);
}
}
}
答案 0 :(得分:5)
调用AddProject
操作时,ASP.NET MVC会创建控制器的实例(使用ControllerFactory
),并且因为您的方法是静态的,所以它与任何实例无关,因此,它不会被MVC调用。
从方法声明中删除静态,并使用/Home/AddProject
作为URL。