在我的RouteConfig中添加产品路线后,我的默认主页更改为“产品”页面。如何再次将我的家庭控制器设置为我的默认主页。
routes.MapRoute(
name: "Product",
url: "{controller}/{action}",
defaults: new { controller = "Product", action = "Index" }
);
routes.MapRoute(
name: "Products",
url: "products/{categoryName}/{Id}",
defaults: new { controller = "Products", action = "Index", categoryName = "", Id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{action}",
defaults: new { controller = "Home", action = "Index"}
);
答案 0 :(得分:0)
这是我的路线表。它默认不使用我在表格上标记的路线。
答案 1 :(得分:0)
我认为第一个和最后一个将以相同的方式行动。程序将选择匹配的第一个路线,因此您应该像这样硬编码第一条路线。
routes.MapRoute(
name: "Product",
url: "Product/{action}",
defaults: new { controller = "Product", action = "Index" }
);
或者你应该删除第一条路线。我认为你应该采用这种方法。
routes.MapRoute(
name: "Products",
url: "products/{categoryName}/{Id}",
defaults: new { controller = "Products", action = "Index", categoryName = "", Id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
<强>说明:强> 来自斯蒂芬沃尔特的post
默认路由表包含单个路由(名为Default)。默认路由将URL的第一个段映射到控制器名称,将URL的第二个段映射到控制器操作,将第三个段映射到名为id的参数。
假设您在网络浏览器的地址栏中输入以下网址:
/Home/Index/3
默认路由将此URL映射到以下参数:
controller = Home
action = Index
id = 3
当您请求URL / Home / Index / 3时,将执行以下代码:
HomeController.Index(3)
默认路由包括所有三个参数的默认值。如果您不提供控制器,则控制器参数默认为Home。如果您不提供操作,则action参数默认为值Index。最后,如果您不提供id,则id参数默认为空字符串。
让我们看几个默认路由如何将URL映射到控制器操作的示例。想象一下,您在浏览器地址栏中输入以下URL:
/Home
由于Default route参数的默认值,输入此URL将导致调用清单2中的HomeController类的Index()方法。
清单2 - HomeController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}
}
}
在清单2中,HomeController类包含一个名为Index()的方法,该方法接受名为Id的单个参数。 URL / Home导致使用空字符串作为Id参数的值调用Index()方法。
由于MVC框架调用控制器操作的方式,URL / Home也匹配清单3中HomeController类的Index()方法。
清单3 - HomeController.cs(没有参数的索引操作)
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
清单3中的Index()方法不接受任何参数。 URL / Home将导致调用此Index()方法。 URL / Home / Index / 3也调用此方法(忽略Id)。
URL / Home还匹配清单4中HomeController类的Index()方法。
清单4 - HomeController.cs(带可为空参数的索引操作)
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(int? id)
{
return View();
}
}
}
在清单4中,Index()方法有一个Integer参数。因为参数是可以为空的参数(可以具有值Null),所以可以在不引发错误的情况下调用Index()。
最后,使用URL / Home调用清单5中的Index()方法会导致异常,因为Id参数不是可为空的参数。如果您尝试调用Index()方法,则会得到图1中显示的错误。
清单5 - HomeController.cs(带有Id参数的索引操作)
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(int id)
{
return View();
}
}
}