2016-10-04 2 views
0

Я хочу изменить сайт, над которым я работаю, чтобы когда кто-то создавал статью, путь был бы «Статьи/ViewArticle/2016-10-04/test «вместо этого прямо сейчас это просто« Статьи/ViewArticle/test ». Когда я реализовал его, я получил мгновенный 404.Как получить дату «папка» в MVC Url

Я попытался создать этот маршрут до & после маршрута по умолчанию, но до сих пор не идти:

routes.MapRoute(
    name: "ArticlesDefault", 
    url: "{controller}/{action}/{date}/{id}", 
    defaults: new { controller = "Articles", action = "ViewArticle", date = UrlParameter.Optional, id = UrlParameter.Optional } 
); 

Я хотел бы отметить, что «идентификатор» на самом деле хранится в базе данных как [дата]/ArticleTitle.

Помогло ли кто-нибудь?

+0

ли вы добавить параметр в вашем представлении. 'public ActionResult ViewArticle (идентификатор строки, строка date)'? –

ответ

1

Использовать маршрутизацию атрибутов. Используя маршрутизацию атрибутов, вы можете построить маршруты, используя значения параметров, переданных методам действия.

Более подробная информация о маршрутизации атрибутов здесь https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

, если вы не хотите использовать маршрутизацию атрибутов, вы можете использовать constraints параметр MapRoute метода

Edit:

Вы можете попробовать любой один из следующих подходов

  1. Без использования маршрутизации атрибутов. Я предполагаю, что ваш Id в виде {date}/articleTitle

    routes.MapRoute(
    name: "ArticlesDefault", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Articles", action = "ViewArticle" }, 
    constraints: new { id = “\\d+” }); 
    
  2. Использование атрибута маршрутизации. Лучшим подходом будет разделение названия статьи и статьи на два разных параметра. Затем вы можете использовать следующий код.

    [Route("Articles/ViewArticle/{articleDate:datetime}/{articleTitle}")] 
    public ActionResult ViewArticle(string articleTitle, DateTime articleDate) 
    { 
        //your action code goes here 
    } 
    
+0

Я попытался реализовать это, включив маршрутизацию атрибутов. Сначала у меня был [Route ("ViewArticle/{id})], но это не сработало (как id, например, 2016-10-01/the-article-title). Попробовал что-то более сложное, например: [Маршрут («ViewArticle/{regex (\\ d {4} - \\ d {2} - \\ d {2} \\/[a-zA-Z -] + $}")] и MVC, лая ( – ajtatum

+0

Также пробовал это, но получил маршрут 404: .MapRoute ( "ArticlesDefault", "ViewArticle/{id}", new {controller = "Articles" , action = "ViewArticle"}, new {id = @ "^ \ d {4} - \ d {2} - \ d {2} \/[a-zA-Z -] + $"}, новый [] {"oandp_redesign_web.Controllers"} ); – ajtatum

+0

@ajtatum Добавил примеры кода. Дайте мне знать, если это какая-либо помощь. – Gurdev

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