2012-01-04 86 views
0

我的MVC应用程序(.NET MVC 3)工作。我的默认控制器不工作(.NET MVC)

我想实现,如果用户离开url路径(例如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)在查看/默认发现,只是表示欢迎信息。 不幸的是,如果我离开了url路径,空白页显示为。它只适用于如果我添加“默认”作为路径的URL

http://localhost:12345/Default 

我错过了什么吗?

+0

不,我认为你做得很好!有一件事,尽管我假设你没有在Global.asax中定义的更多路由如果是这种情况,那么请添加您的默认路由作为第一个路由! – GuruC 2012-01-04 12:46:55

+0

不,这是完整的代码 – AGuyCalledGerald 2012-01-04 12:49:39

回答

2

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

+1

好,你发现了错误!因为找到这样的错误总是让你有点沮丧。 – GuruC 2012-01-05 06:39:28

+0

是的......特别是因为我应该知道自从问了另一个问题...... – AGuyCalledGerald 2012-01-05 08:53:07

0

我真的不明白你的意思。你正试图获得已经内置的东西,并准备在任何新鲜的mvc项目中使用。

当你创建一个新的项目,有利用控制器=“家”,行动=“指数”的缺省路由,并且只可以作为你打算。

也许这是事实,你既命名控制器和动作是相同的(默认),但我真的不知道,也没有看到这一点推倒重来。

0

从这个page报价:

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

所以您可以将控制器重命名为HomeContoller也可以创建一个重定向到您所需的URL里面default.aspx文件。

+4

您的回答似乎不正确!我的意思是用户可以将任何控制器设置为默认值,并将任何操作设置为默认值,没有什么比它必须是主控制器,在你给出的链接中,它只是解释了这个例子的行为! – GuruC 2012-01-04 12:54:02

+1

对我感到羞耻,我应该改善我的阅读技能;) – 2012-01-04 16:08:11

4

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

  1. 使用内置向导
  2. 在控制器上的文件夹点击右键,选择添加 - >控制器,并使用DefaultController作为名称使用以下内容创建一个新的ASP.NET MVC 3应用程序:

    public class DefaultController : Controller 
    { 
        public ActionResult Default() 
        { 
         return View(); 
        } 
    } 
    
  3. 添加~/Views/Default/Default.cshtml观点:

    @{ 
        ViewBag.Title = "Default"; 
        Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 
    
    <h2>Default</h2> 
    
  4. 更新Global中的RegisterRoutes方法。ASAX,使其看起来就像这样:

    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 } 
        ); 
    } 
    
  5. 命中F5

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