MVC 路由 id 参数的正确使用
Correct usage of MVC route id parameter
我想在 asp.net mvc 中执行以下操作:
myquizsite.com/quizzes - list quizzes available
myquizsite.com/quizzes/quiz1 - list previous instances of quiz1
myquizsite.com/quizzes/quiz2 - list previous instances of quiz2
myquizsite.com/quizzes/quiz1/create - create new quiz1
使用默认路由,这意味着 "create" 参数被传递到操作 quiz1 中以创建它的新实例。
这对我来说似乎很奇怪,所以我猜想有更好的方法,但我不确定怎么做。
使用 MVC 属性路由
public QuizzesController :Controller
{
[Route("quizzes/{id?}")]
public ActionResult Index(string id="")
{
if(!String.IsNullOrEmpty(id))
{
//to do :Return quizzes available
}
else
{
//To do :Return previous instances of id passed(Ex :quiz1/quiz2)
}
}
[Route("quizzes/{id}/create")]
public ActionResult Create(string id)
{
// to do : return Create view for Id passed (Ex :quiz1/quiz2)
}
}
您可以在 RouteConfig.cs 文件的 RegisterRoutes
方法中启用属性路由。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); //This line enables attribute routing
//Default Route definition goes here
}
我想在 asp.net mvc 中执行以下操作:
myquizsite.com/quizzes - list quizzes available
myquizsite.com/quizzes/quiz1 - list previous instances of quiz1
myquizsite.com/quizzes/quiz2 - list previous instances of quiz2
myquizsite.com/quizzes/quiz1/create - create new quiz1
使用默认路由,这意味着 "create" 参数被传递到操作 quiz1 中以创建它的新实例。
这对我来说似乎很奇怪,所以我猜想有更好的方法,但我不确定怎么做。
使用 MVC 属性路由
public QuizzesController :Controller
{
[Route("quizzes/{id?}")]
public ActionResult Index(string id="")
{
if(!String.IsNullOrEmpty(id))
{
//to do :Return quizzes available
}
else
{
//To do :Return previous instances of id passed(Ex :quiz1/quiz2)
}
}
[Route("quizzes/{id}/create")]
public ActionResult Create(string id)
{
// to do : return Create view for Id passed (Ex :quiz1/quiz2)
}
}
您可以在 RouteConfig.cs 文件的 RegisterRoutes
方法中启用属性路由。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); //This line enables attribute routing
//Default Route definition goes here
}