MVC处理嵌套操作方法?

Fix*_*xer 3 model-view-controller asp.net-mvc design-patterns url-routing ruby-on-rails-3

我有一个包含一个或多个问题的Project类:

public class Project
{
    public int Id {get; set;}
    public string Name {get; set;}
    public List<Issue> Issues {get; set;}
}

public class Issue
{
    public int Id {get; set;}
    public string Description {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我在构建我的mvc应用程序时遇到问题,以便问题是URL路由上项目的子项?

/projects/details/1/issues/ - Display list of project issues
/projects/details/1/issues/1 - Display issue #1
/projects/details/1/issues/2 - Display issue #2
/projects/details/1/issues/create/ - Create a new issue for project #1
Run Code Online (Sandbox Code Playgroud)

我最初的想法是创建一条导致以下Action Method的路线

public ActionResult Details(int projectId, string action)
{
    if(action =="issues")
    {
      //Call ActionMethod...
    }
}
Run Code Online (Sandbox Code Playgroud)

但它感觉不对.有什么建议?用RoR这样的事情是真的吗?

Ufu*_*arı 5

您可以为此操作提供这样的路线:

routes.MapRoute("ProjectIssues",
                "projects/{projectID}/issues/{issueID}",
                new { controller=Projects, action=Details});
Run Code Online (Sandbox Code Playgroud)

然后http://domain.com/projects/3/issues/5等请求将映射到ProjectsController中的Details操作.

您可以在路径中获取具有相同参数名称的参数

public ActionResult Details(int projectID,int? issueID)
{
    if(issue.HasValue)
    {
        return RedirectToAction("IssueDetails",new {ProjectID=projectID,IssueID=issueID});
    }
    else
    {
        return RedirectToAction("AllIssues",new {ProjectID=projectID});
    }

}
Run Code Online (Sandbox Code Playgroud)