我正在使用ASP MVC 1开发一个简单的CRUD应用程序,该应用程序将跨多个表存储数据以用于多个学生程序。在这样做的过程中,我试图弄清楚如何构建URL以适应每个程序,它们的表和它们的行为。
例如,我想要实现的目标是:
site.com/StudProg1/Participant/Create 将是为学生计划1插入参与者表格的条目
site.com/StudProg2/Course / 将成为学生计划2课程表的索引页面的网址
在我尝试创建自定义路由以适应这种情况时,我的Global.asax.cs文件如下:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"StudProg1",
"StudProg1/{pageName}/{action}",
new { controller = "StudProg1", pageName="Index", action = "Index" }
);
routes.MapRoute(
"StudProg2",
"StudProg2/{pageName}/{action}",
new { controller = "StudProg2", pageName="Index", action = "Index" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
}
其中pageName应该是表名。
毫不奇怪,上面的结构不会返回我的目标输出(即它总是指向StudProg的索引页面)。
此外,我的文件目录结构如下:
Views StudProg1 Index Participant Index Create StudProg2 Index Courses Index Create
等。
我的问题是,如何改进我的路线以正确实现我想要的URL结构。此外,除了Microsoft ASP.NET开发人员网站之外,是否有关于自定义路由的好教程?
答案 0 :(得分:0)
您不应该为每个学生计划(StudProg1,StudProg2等)创建控制器。您可以接受它作为参数。
您只需要2个控制器,一个用于Particiant,一个用于课程。
public class ParticipantController : Controller
{
public ActionResult Index()
{
return Content("Reques for partiicpant index page if needed");
}
public ActionResult create(string studentProgram)
{
return Content("Partiicpant create for "+studentProgram);
}
}
public class CourseController : Controller
{
public ActionResult Index()
{
return Content("Course:");
}
}
并在RouteConfig的RegisterRoutes方法中,指定通用默认路由之前的2条特定路由。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("part","{studentProgram}/Participant/{action}",
new { controller = "Participant", action = "Index" }
);
routes.MapRoute("course", "{studentProgram}/Course/{action}",
new { controller = "Course", action = "Index" }
);
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}