11

我有一个名为 UserController 的控制器,其中只有 Index 操作被称为另一个添加的操作,例如“ home action ”没有被调用,或者调用 actionresult/string 或返回视图

我收到此错误

在 Google Chrome 上运行时

{"Message":"未找到与请求 URI /user/home' 匹配的 HTTP 资源。","MessageDetail":"未找到与名为 'home' 的控制器匹配的类型。"}

并在 Mozilla Firefox 上运行

哎呀!找不到该页面。尝试在下面再给它一次机会。

这是我的整个控制器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Mvc4Application1.Controllers
{
    public class UserController : Controller
    {
        //
        // GET: /User/
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult AddPlace()
        {
            return View();
        }

        public ActionResult UpdatePlace()
        {
            return View();
        }

        public ActionResult DeletePlace()
        {
            return View();
        } 
    }
}

这是 RouteConfig.cs 文件

 routes.MapRoute(
     name: "Default",
      url: "{controller}/{action}/{id}",
 defaults: new 
{ controller = "Home", action = "Index",
  id=UrlParameter.Optional }
4

4 回答 4

14

Controller 中返回 a 的方法string不可路由。它必须返回一个ActionResult(或其派生类之一)。

将其更改为:

public ActionResult Home()
{
    return View("Hello from home");
}

然后在您的 Views/Home 文件夹中,添加一个名为 Home 的视图,其内容如下:

@model string

<p>@Model</p>
于 2013-05-31T11:40:42.723 回答
12

以下是您需要交叉检查的以下事项

  • 从 Controller 而不是从 ApiController 继承控制器
  • 确保 Routeconfig 具有正确的 Maproute

    否则你需要重命名控制器[听起来很奇怪,但它可能会有所帮助]

使用 ActionResult 作为返回数据类型

于 2013-06-01T09:30:40.000 回答
5

需要考虑的事项:

  • 确保你从 Controller 继承你的控制器,而不是从 ApiController
  • 确保您的路线正常
  • 从评论中,还要确保您的控制器不是主页,该用户是您路线上的默认用户

这些都是相当简单的事情,但我点击了好几次才意识到我在 Asp .NET MVC 4 上选择了 ApiController!

示例路线是:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "User", action = "home", id = UrlParameter.Optional } 
);

请注意,这将使用 UserController 作为默认视图,将 home 作为默认视图,不过,我建议将 home 命名为 Index,因为它更常见。

如果不是这些,请发布您的整个控制器,以便我们进一步了解它!

希望我能帮上忙!

于 2013-05-31T11:36:47.777 回答
0

看我自己的问题!和我自己的回复,您只需要在 routeconfig 文件中添加一个额外的 maproute 以获得该控制器名称

routes.MapRoute(
                name: "WhateverName" ,
                url: "ProblematicControllerName/{action}/{id}" ,
                defaults: new { controller = "user" , action = "anyaction" , id = UrlParameter.Optional }


            );

为什么我不能命名 MVC .net 控制器会话?

于 2015-07-31T06:48:55.427 回答