【问题标题】:Why can't Controller/Action path being found?为什么找不到 Controller/Action 路径?
【发布时间】:2015-03-15 09:01:18
【问题描述】:

我将我的可观察数据从 js 发布到服务器端。但是我从萤火虫那里得到了这个错误信息。

“POST http://localhost:54964/Administration/User/CreateUser”404 未找到

UserModel.js(我的淘汰赛)

return function () {
    var self = this;
    self.email = ko.observable("");
    self.password = ko.observable("");

    self.createUser = function () {
        console.log("hey");
        webRequest.postJSON("/Administration/User/CreateUser", ko.toJSON(self), self.saveSucceeded);
    }

    self.saveSucceeded = function (result) {
        utils.showSuccess("OK..");
        window.location.href = "http://" + window.location.host + "/#/Administration/AllUsers";
    }
}

我在其中有 UserController.cs 和 CreateUser 操作。但是我得到了这个错误。找不到我的操作方法。

通过视图模型发送的 observables

AddUserModel.cs

public class AddUserModel
    {
        [Required(ErrorMessage = "Eposta alanı boş olamaz.")]
        [RegularExpression(@"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$", ErrorMessage = "Geçerli bir e-posta adresi giriniz")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Şifre alanı boş olamaz.")]
        public string Password { get; set; }
    }

以及在控制器中创建用户的方法。

UserController.cs

[HttpPost]
  public ActionResult CreateUser(AddUserModel model)
        {
            MembershipCreateStatus status;
            Membership.CreateUser(model.Email, model.Password, model.Email, null, null, true, out status);
            if (status == MembershipCreateStatus.Success)
            {
                return Json(true);
            }
            else
            {
                return new Json(false);
            }
        }

注意:管理是一个“文件夹”。我将其更改为“区域”以进行区域注册。因此我删除了管理“文件夹”,然后添加了管理“区域”。这可能是一个原因。我不知道。

错误消息= 路径“/Administration/User/CreateUser”的控制器未找到或未实现 IController。

为什么找不到控制器或动作?

【问题讨论】:

  • 我们应该怎么知道?我们无权访问您的代码(提示:首先发布您的 MVC 路由)。
  • 不需要发布我的路线,我只想说,在我将管理“文件夹”转换为管理“区域”之前,我的程序运行良好。在我这样做之后,它没有工作。正如我提到的我的帖子。
  • 您认为客户端代码在向您的 MVC 应用程序发出 POST 请求之前和之后所做的事情的无关细节对于解决未命中操作的问题比您的路由更重要吗?难怪你的代码不起作用;)

标签: javascript c# asp.net-mvc knockout.js


【解决方案1】:

在您的区域内,您将拥有一个名为 AdministrationAreaRegistration.cs

的文件

您应该在该文件中定义您的路线,如下所示:

public class AdministrationAreaRegistration : AreaRegistration
{
     public override string AreaName{
          get{ "Administration"}
     }

     public override void RegisterArea(AreaRegistrationContext context){
          context.MapRoute(
               "Administration_default",
               "Administration/{controller}/{action}/{id}",
               new { action = "Index", id = UrlParameter.Optional},
               new [] { "YourControllerNamespace" }
          );
     }


}

阅读更多here关于区域注册的信息。

确保在这个文件 App_Start/RouteConfig.cs 中有这一行:

AreaRegistration.RegisterAllAreas();

在 RegisterRoutes 方法中。

【讨论】:

  • 我做到了。当我首先创建项目时,我添加了一个名为 Administration 的文件夹。在我需要 AdministrationAreaRegistration 文件之后,为此我删除了 Administration 文件夹,并使用 AdministrationAreaRegistration 创建了一个名为“Administiration”的区域。我将文件夹复制到这个新区域。毕竟这些我的js开始不发帖了。
  • 更新我的答案。发布更多代码,很难像这样帮助你。 @user2923864
  • 有帮助吗? @user2923864
猜你喜欢
  • 2013-01-09
  • 2017-03-07
  • 2011-10-13
  • 2014-07-27
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
相关资源
最近更新 更多