2013-08-20 82 views
1

好了,所以我想建立一个具有以下作用的方法ASP.Net MVC路由/使用动态操作

public ActionResult ExecuteStep_1a 
public ActionResult ExecuteStep_1b 
public ActionResult ExecuteStep_2 

等控制器...

有没有办法定义路由它使用连接到动作名称的get参数?因此,例如,URL将是/ step/ExecuteStep_1a。我试着定义一条URL等于的路线:

{controller}/{action}_{number} 

没有成功。我再次尝试了其他几种排列方式,但没有结果。如果有人能指引我正确的方向,我会很感激。哦,我设置的行动等于ExecuteResult_与默认如果这增加了我的解释任何。

回答

1

您可以用root行动和他们使用反射这样的:

{controller}/{action}/{step} 

public ActionResult ExecuteStep(string step){ 
    try { 
     Type thisType = this.GetType(); 
     MethodInfo theMethod = thisType.GetMethod("ExecuteStep_" + step); 
     return theMethod.Invoke(this, null); 
    } 
    catch {} 
} 

但有一定的速度限制,如果你使用的反思。

+1

我试图避免有一个“根”的行动。最终,我最终为每个想要映射的动作都创建了一个独特的路由记录。所以我有一个URL定义为{控制器}/1a,{控制器}/1b等等。控制器中放置的默认值和相应的操作名称,在这种情况下,Step和ExecuteStep_1a,ExecuteStep_1b等。我决定即使我可以使用反思把它拉开,好处是不值得付出努力和额外的处理。 – Shawn

+1

@Shawn是的,这将是更明智的选择,如果你没有太多的动作(步骤),那么反思只是如何实现你的需求的方式之一。 –