控制器不在mvc 4中工作

时间:2013-05-31 11:31:09

标签: c# .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个名为UserController的控制器,并且只调用了Index操作 未调用另一个添加的操作,例如“主页操作”,调用actionresult / string或返回视图

我收到此错误

在Google Chrome上运行

  

{“Message”:“找不到与请求URI匹配的HTTP资源   /user/home'.","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 个答案:

答案 0 :(得分:14)

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

将其更改为:

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

然后在Views / Home文件夹中,添加一个名为Home的视图,其中包含:

@model string

<p>@Model</p>

答案 1 :(得分:11)

以下是您需要交叉检查的内容

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

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

使用ActionResult作为返回数据类型

答案 2 :(得分:5)

需要考虑的事项:

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

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

示例路线为:

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

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

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

希望我能帮忙!

答案 3 :(得分:0)

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

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


            );

Why I can't name a MVC .net controller session?