2011-01-21 3 views
0

이것은 아마도 어리석은 일이지만 그것을 파악하지 못하는 것 같습니다. Html.ActionLink을 사용하여 마스터 페이지와 하위 페이지 간의 링크를 만듭니다 : Employees -> Employee.Html.ActionLink 렌더링 경로가 아닌 URL

랜더링 된 URL이 일치해야하는 라우트로 "모양"이없는 것으로 나타났습니다. 예를 들어, /Employees/{EmployeeId} 일 때 생성되는 URL은 /Employee?EmployeeId=?입니다.

그런 종류의 URL을 반환하도록되어있는 것이 누락 되었습니까? 나는 2 주 전까지 내가 Html.ActionLink으로 바꿨을 때까지 모든 연결을 쓰는 손이었고 제대로 작동했다는 맹세를했을 수 있었지만 지금은 내 앱에서이 패턴을 볼 수 있으며, 나는 그것을 좋아하지 않는다. ...

Url.ActionHtml.RouteLink도 같은 URL을 만듭니다.

도움을 받으실 수 있습니다.

Routes.MapRoute("QbNn7GFjJZBzYED7", Settings.EmployeeRoute, new { 
    action = "Employee" 
}, new { 
    controller = new ControllerConstraint(Settings.AdministrationController), 
    group = new GroupConstraint(Settings.CorporateGroup), 
    EmployeeId = @"\d+" 
}); 

Settings.EmployeeRoute = "{controller}/{group}/Employees/{EmployeeId}"; 
Settings.AdministrationController = "Administration"; 
Settings.CorporateGroup = "Corporate"; 

을 그리고 당신이 요청하기 전에 경로 이름 QbNn7GFjJZBzYED7 왜 내가 경로 이름을주는 피곤했고 때문입니다 : 여기

@Darin

에 대한

UPDATE는 경로가 등록 방법 나는 그들의 이름으로 경로를 참조하지 않기 때문에 무작위로 문자열을 생성하기 시작했습니다.

업데이트 2 개

두 제약은 본질적으로 다른 이름과 동일 하였다. 따라서, 나는 하나로 합쳐졌고 그 모습은 다음과 같습니다.

internal class NameConstraint : IRouteConstraint { 
    private readonly string[] Names = new string[0]; 

    public NameConstraint(
     string Name) { 
     this.Names = new string[1] { 
      Name.ToLower() 
     }; 
    } 

    public NameConstraint(
     string[] Names) { 
     this.Names = Names.Select(
      n => 
       (n.ToLower())).ToArray(); 
    } 

    public bool Match(
     HttpContextBase HttpContextBase, 
     Route Route, 
     string Paramater, 
     RouteValueDictionary RouteValueDictionary, 
     RouteDirection RouteDirection) { 
     string Param = ((string)RouteValueDictionary[Paramater]).ToLower(); 

     return this.Names.Contains(Param); 
    } 
} 

이제는이 업데이트와 이전 버전 사이에 경로가 자동으로 수정되었습니다. 발생한 유일한 변경 사항은 ControllerConstraintGroupConstraint이며이를 NameConstraint과 병합하여 이후의 재구성이었습니다.

어떻게 수정해야할지 모르지만 그랬습니다. 나는 이것이 제약 조건의 합병이라고 생각하지 않으며 그것이 재건이라고 의심한다.

이제이 두 가지가 생성하는 올바른 경로 : 나는 실제 수정이 무엇인지 확실하지 않다 결국

Html.ActionLink(Employee.Name, "Employee", new { EmployeeId = Employee.EmployeeId }) 
Html.ActionLink(Employee.Name, "Employee", "Administration", new { group = "Corporate", EmployeeId = Employee.EmployeeId }, null) 

...

답변

1

경로는 다음과 같습니다 경우 {controller}/{group}/Employees/{EmployeeId}

:이 경로와 일치하는 행동 링크를 생성하기 위해
routes.MapRoute(
    "CustomRoute", 
    "{controller}/{group}/Employees/{EmployeeId}", 
    new { 
     controller = "Foo", 
     action = "Bar", 
     EmployeeId = UrlParameter.Optional 
    } 
); 

이 필요 61,

유의할 것들 :

  • 귀하의 경로를 정의하면 경로의 기본 값으로 정확하게 동작을 지정해야한다는 것을 의미 {action} 자리를 포함하지 않습니다.
  • group 매개 변수를 지정해야합니다. 경로의 끝 부분에 없기 때문에 선택 사항이 될 수 없습니다.
+0

잠시 내 희망을 가지고 있지만 슬프게도 작동하지 않습니다. 헬퍼를 작성하는 방법은 다음과 같습니다.'Html.ActionLink (Employee.Name, "Employee", "Administration", new {group = "Corporate", EmployeeId = Employee.EmployeeId}, null)'; 그리고 그것이 생산하는 것은 다음과 같습니다 :'/ Administration/Corporate/Employee? EmployeeId = 8'. 도우미가 올바르게 작동하지 않는 것처럼 경로를 쓰는 것에 대해 논쟁 중입니다. – Gup3rSuR4c

+0

경로는 어떻게 생겼습니까? 'Employee'는 경로 정의의 기본 동작입니까? 내 예를보세요. 내 경로 정의의 기본 동작은'Bar'이며, 이것은'ActionLink' 도우미에서 사용하는 것과 같습니다. –

+0

위의 업데이트를 확인하십시오. – Gup3rSuR4c

관련 문제