我的默认控制器不起作用(.Net MVC)

时间:2012-01-04 12:32:36

标签: .net asp.net-mvc-3 controller default

我在mvc应用程序(.Net MVC 3)上工作。

我想实现这一点,如果用户离开url-path(例如http://localhost:12345/),则调用默认控制器以输出默认视图。所以我在Global.asax

中注册了这个
public static void RegisterRoutes(RouteCollection routes)
{
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

我在“控制器”文件夹中有一个DefaultController

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

namespace RyfMvcTestApplication1.Controllers
{
    public class DefaultController : Controller
    {
      public ActionResult Default()
      {
        return View();
      }
    }
}

视图(Default.cshtml)位于Views / Default中,只显示欢迎消息。 不幸的是,如果我离开网址路径,会显示空白页。它只有在我添加“默认”作为URL的路径

时才有效
http://localhost:12345/Default

我错过了什么吗?

4 个答案:

答案 0 :(得分:4)

无法重现您的问题。步骤进行:

  1. 使用内置向导
  2. 创建新的ASP.NET MVC 3应用程序
  3. 右键单击Controllers文件夹,选择Add-> Controller并使用DefaultController作为名称,并包含以下内容:

    public class DefaultController : Controller
    {
        public ActionResult Default()
        {
            return View();
        }
    }
    
  4. 添加~/Views/Default/Default.cshtml视图:

    @{
        ViewBag.Title = "Default";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    <h2>Default</h2>
    
  5. 更新Global.asax中的RegisterRoutes方法,使其如下所示:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "Route1",
            "{controller}/{action}/{id}",
            new { controller = "Default", action = "Default", id = UrlParameter.Optional }
        );
    }
    
  6. 点击 F5

  7. 启动内置Web服务器,应用程序使用http://localhost:xxxx/作为网址在默认浏览器中运行,并在default控制器上执行default操作。

答案 1 :(得分:2)

对不起大家,我通过在项目中插入Default.aspx页面犯了一个非常愚蠢的错误。默认情况下,当网址不包含路径时,始终显示此页面,并且它优先于global.asax的设置:(

答案 2 :(得分:0)

我真的没有看到你的观点。您正在尝试实现已经内置并可以在任何新的mvc项目中使用的内容。

当你创建一个新项目时,有一个使用controller =“home”,action =“index”的默认路由,它只是按你的意愿工作。

也许这是你将控制器和动作命名为相同(默认)的事实,但我真的不知道,也没有看到重新发明轮子的重点。

答案 3 :(得分:0)

引用此page

  

如果您不提供控制器,则控制器参数默认为Home。如果您不提供操作,则action参数默认为值Index。最后,如果您不提供id,则id参数默认为空字符串。

因此,您可以将控制器重命名为HomeContoller,或者您可以在default.aspx文件中创建指向所需URl的重定向。