目前我有3个控制器:Home,Summary和Detail 但是,每个只有一个动作:索引,显示和显示。
这对我来说很难闻。
我希望使用MapRoute来允许:
myapp/Home
myapp/Summary/prop1/prop2
myapp/Detail/prop1/prop2/prop3
而不是
myapp/Home
myapp/Summary/Display/prop1/prop2
myapp/Detail/Display/prop1/prop2/prop3
从而错过了“显示”部分...但是再一次,这闻不对劲。虽然它有效,但它意味着手动添加链接而不是使用Html.ActionLink(...)
将Home / Index,Home / Summary和Home / Detail都集中在一个控制器中会更好吗?
我希望提供一个简单的URL结构,以便知道他们正在做什么的用户可以简单地按上面的方式输入...“Home”部分似乎浪费了?
答案 0 :(得分:0)
不确定我是否完全接受了您的问题,但是如何创建一个继承自Controller
的基本控制器类,并在那里进行共享操作呢?这样你就不需要重复自己了。
答案 1 :(得分:0)
你只需要一个控制器,里面有多个动作..
public class HomeController:Controller {
public ActionResult Index()
{
}
public ActionResult Summary()
{
}
public ActionResult Details()
{
} }
在动作链接中
@ Html.ActionLink(“详细信息”,“详细信息”,“主页”);
这就够了,不需要添加多个控制器..
希望这些有帮助..
答案 2 :(得分:0)
在谈到这个问题时,你几乎可以找到你想要的任何路线,这一切都取决于你想要达到的目标。
您可以将所有操作都放在Home控制器中,这样您的路线就可以
myapp/Home
myapp/Home/Summary/prop1/prop2
myapp/Home/Details/prop1/prop2/prop3
在此选项中,您有1个控制器,3个操作,以及2个其他路径来处理URls
这取决于摘要和详细信息的内容?如果它是订单的摘要,我宁愿
myapp/Orders/Summary/prop1/prop2
myapp/Orders/Details/prop1/prop2/prop3
在此您将拥有Home控制器和Index操作,然后是具有两个操作的Orders控制器。我会说,摘要和细节通常会建议你显示一些东西,所以你不需要像你的建议中那样使用“显示”部分。
答案 3 :(得分:0)
如果您希望您的网址
myapp/Home
myapp/Summary/prop1/prop2
myapp/Detail/prop1/prop2/prop3
然后你制作3个控制器
HomeController的 SummaryController DetailController
每个都有1个动作
public ActionResult Index(){
}
对于SUmmary和Detail控制器,您只需将一些额外的参数传递给Index
动作
答案 4 :(得分:0)
我同意@Tim你应该使用一个控制器。控制器是动作的逻辑分组;例如Foo的CRUD操作。 NerdDinner就是一个很好的例子。
我不同意这些路线。你可以用路由做任何你想做的事情;但它应该对用户有意义。你可能只有一条与下面相似的单一路线。
routes.MapRoute("Default", //RouteName
"{controller}/{action}/{id}", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index",
id = UrlParameter.Optional}
)
您可以使用单个控制器获得所需的路线。
您想要的网址:
的myapp /主页
的myapp /概述/ PROP1 / PROP2
的myapp /详细内容/ PROP1 / PROP2 / prop3
控制器设置:
public class HomeController : Controller
{
public ActionResult Index() { ... }
public ActionResult Summary() { ... }
public ActionResult Details() { ... }
}
路由设置:
routes.MapRoute("Home-Index", //RouteName
"myapp/Home", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index"});
routes.MapRoute("Home-Summary", //RouteName
"myapp/Summary/prop1/prop2", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Summary",
prop1 = UrlParameter.Optional,
prop2 = UrlParameter.Optional});
routes.MapRoute("Default", //RouteName
"{controller}/{action}/{id}", //RouteUrl
new { //RouteDefaults
controller = "Home",
action = "Index",
id = UrlParameter.Optional}
)
现在有一些重要的事情需要注意:
路由的工作方式类似于switch语句,匹配的第一个url是 它将使用的那个,这就是为什么你把它作为最后一个 之一。
地图路线中定义的网址可以是您想要的任何内容。它 不必与控制器匹配,因为一旦你删除 占位符({controller}等)它使用默认值 导航。所以Home-Index路线网址可能是myapp / foo / bar / baz 并且id仍会将您带到Home索引操作。
占位符自动运行。我无法找到解释默认路由如何工作的好资源。
希望这有帮助。