我想实现以下功能(使用ASP.NET MVC 3):
一个名为“apps”的控制器,其操作如下:
在最后一个动作中,我真的想要一些子动作,例如:
我可以编写New()动作来取一些参数来说明我应该渲染哪个视图(即产品或关税)但感觉有点脏。
我真正想要的是产品和关税的单独行动方法。
最好的方法是什么?
我想我可以使用区域,但这对我想要的东西来说似乎有点过分了 - 只是编写自定义路线的解决方案吗?
非常感谢! 萨姆
答案 0 :(得分:2)
如果您希望能够添加两个不同的内容,那么这是您控制器上的两个不同操作。听起来你只是想控制你的URL架构,所以我认为某种自定义路由就是答案。
为什么不为关税和产品设置单独的控制器?这将导致自然的URL架构。
答案 1 :(得分:2)
你可以使用区域,但是对于这个小数量我同意它可能是矫枉过正的。我会说新的动作接受参数就可以满足您的需求。如果你想传递更多的信息,但它仍然可以,它可能会变得更复杂。如果你想保持代码干净(呃),你可以让动作在不同的私有方法中完成所有复杂的操作。
但是,使用自定义路由方式(以及使用单独的控制器)...
<强>的Global.asax.cs 强>
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("newControllerRoute",
"apps/new/{action}",
new {controller = "NewApps"});
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
添加控制器(NewAppsController)。
public class NewAppsController : Controller
{
public ActionResult Product()
{
/* used as example */
return Content("NewApps controller - Product");
}
public ActionResult Tariff()
{
/* used as example */
return Content("NewApps controller - Tariff");
}
}
希望这有帮助。