我在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
我错过了什么吗?
答案 0 :(得分:4)
无法重现您的问题。步骤进行:
右键单击Controllers文件夹,选择Add-> Controller并使用DefaultController
作为名称,并包含以下内容:
public class DefaultController : Controller
{
public ActionResult Default()
{
return View();
}
}
添加~/Views/Default/Default.cshtml
视图:
@{
ViewBag.Title = "Default";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Default</h2>
更新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 }
);
}
点击 F5
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的重定向。