2016-09-08 3 views
-1

나는 많은 기사를 표시하는 웹 사이트를 만들고 있습니다. 그것은 MVC에 내장되어 있습니다. 기사를 하루 동안 검색하고 URL을 통해 ID 번호로 검색 할 수 있기를 원합니다.MVC를 사용한 URL 라우팅

도메인 이름이 website.com 인 경우 website.com/yyyymmdd가 특정 컨트롤러 + 메소드를 방문하고 해당 날짜 및 website.com/의 모든 기사를 표시하도록 경로를 만드는 방법을 알아 내려고합니다. yyyymmdd/111은 해당 기사의 기사 # 111을 검색합니다.

내가 겪고있는 문제는 MVC 내에서 라우팅하기위한 모든 자습서가 URL에 컨트롤러와 메소드를 지정한다고 가정한다는 것입니다. 누군가가 자동으로 "website.com/yyyymmdd/111"지정된 컨트롤러 및 방법을 사용, 그 놀라운 것 만들 수있는 방법을 제안 할 수 있다면

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = "" }); 
    } 

: 그들은 같은 것을 보여줍니다. 미리 감사드립니다!

편집 :

public ActionResult ArticlesByDate(string date, int id) 
    { 
     if(id > 1) 
     { 
      return View(Contact()); 
     } 
     else 
     { 
      return View(About()); 
     } 

    } 

은 내가 당신의 사람 '제안을 이해하고 희망하지만,이 날을주고있다 : 내 경로로 이런 짓을 한 내 방법은

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "Today", 
      "{date}/{id}", 
      new { controller = "Articles", action = "Index", date = DateTime.Today.ToString("yyyyMMdd"), id = UrlParameter.Optional }); 
    } 

다음과 같이 "http://localhost:52159/20160908/2"

+3

기본 검색 https://www.bing.com/search?q=asp.net+mvc+routing+specify+controller는 당신을 부여해야

@if(id > 1) { @Html.Partial("_Contact") } else { @Html.Partial("_About") } 
괜찮은 자습서 ... 또는 SO 게시물과 같은 http://stackoverflow.com/questions/15854483/use-mvc-routing-to-override-controller-name-when-presented-with-specific-action. –

+0

model-view-controller 태그는 패턴에 대한 질문입니다. ASP.NET-MVC 구현을위한 특정 태그가 있습니다. –

답변

0

날짜를 매개 변수로 사용하여 해결할 수있는 한 가지 방법이 있습니다.

귀하의 작업은 그런 다음 거기에서 걸릴 수 있습니다

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{articleDate}/{id}", 
      new { controller = "Home", action = "Index",articleDate=DateTime.Today.ToString("yyyyMMdd"), id = "" }); 
} 

것처럼 경로 정의가 될 것

public ActionResult Index(string articleDate,string id) ... 

처럼 보일 것이다 기본 MVC 라우팅 메커니즘에 대한

1

두 번째 경로.

첫 번째 경로는 articles.Controller 및 action 값은 정적입니다. 당신은 당신이 작업에 두 개의보기를 리디렉션하지 못할 website.com/20160912/112 등

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      name: "Articles", 
      url: "{date}/{id}", 
      defaults: new { controller = "Articles", action = "Info"}); 

     routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 
    } 

    public class ArticleController : Controller { 

     public ActionResult Info(string date, int id){ 

      return View(); 

     } 
    } 

을 website.com/20160911/111에 대한 날짜와 ID 값을 변경할 수 있습니다. 하나의보기와 부분보기를 사용하십시오. 예를 들어

Info.cshtml

+0

분명히 날짜에 대한 경로 제약 조건이 누락되었습니다 (한 번 잘못되면 기본값으로 되돌아갑니다). 그렇지 않으면 정확히 OP가 찾고있는 경로 제약 조건입니다. –

+0

이유는 무엇입니까? 나는 이해하지 못합니다. (나는 그것을 제외하고 라우팅합니다. 기사 컨트롤러 정보 작업 @AlexeiLevenkov –

+0

@ SercanTimoçin 제안을 주셔서 감사합니다! 내가 필요한 것 같습니다. 그러나 지금 또 다른 문제가 발생합니다. OP에서 내 진전을 보이고있어. –