这是我名为“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。
