2009-12-28 110 views
1

我創建了一個路由結構,而URL的動作部分充當了一個動態處理器,用於選擇特定用戶創建的系統名稱。即帶動態路由的MVC Post

http://mysite.com/Systems/[SystemName]/Configure,其中[SystemName]指定他們想要配置的系統的名稱。

的路由系統是以下的方法:

public ActionResult Index(string systemName, string systemAction) 
    { 

     ViewData["system"] = _repository.GetSystem(systemName); 
     if (systemAction != "") 
     { 
      return View(systemAction); 
     } 
     else 
     { 
      // No Id specified. Go to system selection. 
      return View("System"); 
     } 
    } 

上述方法設置系統配置和路由到其中顯示視圖的靜態方法和形式等待值。

我的問題是,當我創建我的配置視圖,當表單被提交時,我失去了我的發佈值,因爲它將路由回上述的索引控制器。如何確定數據是否在點擊我的上述指數控制器時發佈,以便我可以做出決定?

謝謝! 喬治

回答

1

標註處理該POST這樣的控制方法:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(string systemName, string systemAction) 
{ 
    // Handle posted values. 
} 

你可以在你的控制器不同的方法處理的GET:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(string systemName, string systemAction) 
{ 
    // No posted values here. 
} 

需要注意的是,雖然我在每種情況下都複製了相同的方法和參數,第二種方法(參數和類型)的簽名將不得不不同,以便這兩種方法不是不明確的。

這個NerdDinner tutorial has examples

+0

請記住,即使使用HttpPostAttribute/HttpGetAttribute,這兩個動作名稱也是模糊的。 – 2009-12-28 18:01:54

+0

沒錯,你必須改變其中一個簽名。 – 2009-12-28 18:03:17

+0

我仍然不確定這是否解決了我的問題。我有一個控制器,通過中心點路由一切,並對動作做出動態選擇。我只需要保持相同的索引控制器簽名,但需要能夠將系統路由到適當的操作,然後確定是否發生了帖子。這有意義嗎? – 2009-12-28 18:26:24