2012-01-25 4 views
0

Я хотел бы наметить новый маршрут после того, как я передам новый объект в db. Так, например, если я ввожу объект с именем «Тест« Я хотел бы иметь новый маршрут немедленно, чтобы решить «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

Смежные вопросы