2

我有包含一個或多個問題一個項目類:MVC處理嵌套動作方法?

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;} 
} 

遇到麻煩構建我的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 

我最初的想法是創建導致以下操作方法

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

的路線,但它只是感覺不對。有什麼建議麼? RoR是否可以這樣做?

回答

3

您可以像這樣的行動提供了一個路線:

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

然後請求像http://domain.com/projects/3/issues/5將被映射到ProjectsController您的詳細操作。

你可以得到相同的參數名稱參數路線

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}); 
    } 

} 
0

也許你缺少MVC的地步。它關於分離的問題沒有嵌套在相關的領域。

你的想法很好,但你需要實現Strategy design pattern有乾淨的代碼。

儘管IssueProject彼此直接相關,但它們位於不同的域。所以,最好將它們分成不同的控制器。您將連接您的問題當你將與你的Project控制器,反之亦然要處理的Issue控制器

我的建議是對於

  • 顯示項目的問題 - /Issue/Details/1 //here 1 is the project number
  • 顯示單一的問題 - /Issue/View/1/101 //1 is the project number and 101 is issue number
  • 創建問題 - /Issue/Create/1 //1 is the project number

這只是我的想法。請隨時爭論我的方法論。