2012-01-25 22 views
0

我想在将新对象提交给db后映射新路由。因此,例如,如果我输入名称为“Test”的对象,我希望立即有一条新路线,以解决“Test.aspx”。如何在控制器中添加路由

我试图

System.Web.Routing.RouteTable.Routes.MapRoute(obj.NameUrl, obj.NameUrl + extension, new { controller = "per", action = "Index", name = obj.NameUrl }); 

的控制器,但它不工作(没有错误,在生命周期只是可能不是正确的时间?)。相同的代码在Application_Start()

回答

3

您应该避免动态注册路由。在Application_Start下面的静态路由应该可以处理你的一种具有动态路由参数的场景:

routes.MapRoute(
    "page", 
    "{name}.aspx", 
    new { controller = "per", action = "index" }, 
    new { name = @"[a-z0-9]+" } 
); 

,如果扩展名必须是动态的,以及:

routes.MapRoute(
    "page", 
    "{name}.{extension}", 
    new { controller = "per", action = "index" }, 
    new { name = @"[a-z0-9]+", extension = @"[a-z]{3,4}" } 
); 

,然后你可以有Index操作来处理请求,这条路线:

public class PerController: Controller 
{ 
    public ActionResult Index(string name, string extension) 
    { 
     ...  
    } 
} 

,如果你想生成一个链接,这个动作:

@Html.RouteLink("go to foo", "page", new { name = "foo", extension = "aspx" }) 
+0

为什么我应该避免动态注册路由,难道不能完成? – Spikolynn

+0

@Spikolynn,你应该避免它,因为这不是打算如何使用路由系统。 –

+0

如果没有意图,它不应该是可能的,但我会接受你的答案,并解决这个特定的解决方案通配符匹配造成的问题。谢谢! – Spikolynn

相关问题