2009-12-28 81 views
3

我已經創建了一個MVC應用程序,它根據用戶數據動態地路由動作和控制器,以便不存在標準動作,但是動態命名動作。MVC - 模擬表單POST

爲了路由控制器和動作正確,每個路線必須經過其確定用戶是否已經到一個有效的系統在這種情況下,集中式索引。即

http://mysite.com/Systems/SystemName/RenameSystem 

...其中的SystemName是動力系統的名稱和RenameSystem是行動。

一旦系統被正確地路由到RenameSystem控制器,用戶會被提示的文本框,使他們能夠更改系統名。當提交被點擊,形式被路由回到我原來的指數控制器

public ActionResult Index(string systemName, string action) 

,而不是標準

public ActionResult RenameSystem(string systemName) 

我已經放在邏輯來確定如果RequestType是POST或GET。如果RequestType是POST,則邏輯偏離並可以捕獲請求對象中包含的表單數據。

我的問題是,我怎麼能接受表單數據,其中包含了我SYSTEMNAME領域和途徑,以便我不需要數據扔進一個switch語句。即我不想這樣做:

switch case(action) 
{ 
     case "RenameSystem": 
     return RenameSystem(Request.Form["systemName"]); 
} 

,我也可以動態POST標準:

public ActionResult RenameSystem(string systemName) 

...只是通過模擬調用查看。

簡而言之,我希望能夠採取行動,RenameSystem並調用它,以便我的systemName將自動落入RenameSystem的systemName參數。

這是可能的,還是有關於如何實現這一目標的任何其他的選擇嗎?

感謝, 喬治

回答

3

嘗試創建一個ControllerActionInvoker並調用InvokeAction與您當前ControllerContext

+0

如何獲得我的ControllerContext? – 2009-12-28 21:28:49

+0

使用控制器的ControllerContext屬性。 – SLaks 2009-12-28 21:38:55

+0

工作就像一個魅力!謝謝! – 2009-12-28 21:46:20