2009-12-28 116 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