이것은 아마도 어리석은 일이지만 그것을 파악하지 못하는 것 같습니다. Html.ActionLink
을 사용하여 마스터 페이지와 하위 페이지 간의 링크를 만듭니다 : Employees -> Employee
.Html.ActionLink 렌더링 경로가 아닌 URL
랜더링 된 URL이 일치해야하는 라우트로 "모양"이없는 것으로 나타났습니다. 예를 들어, /Employees/{EmployeeId}
일 때 생성되는 URL은 /Employee?EmployeeId=?
입니다.
그런 종류의 URL을 반환하도록되어있는 것이 누락 되었습니까? 나는 2 주 전까지 내가 Html.ActionLink
으로 바꿨을 때까지 모든 연결을 쓰는 손이었고 제대로 작동했다는 맹세를했을 수 있었지만 지금은 내 앱에서이 패턴을 볼 수 있으며, 나는 그것을 좋아하지 않는다. ...
Url.Action
및 Html.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);
}
}
이제는이 업데이트와 이전 버전 사이에 경로가 자동으로 수정되었습니다. 발생한 유일한 변경 사항은 ControllerConstraint
및 GroupConstraint
이며이를 NameConstraint
과 병합하여 이후의 재구성이었습니다.
어떻게 수정해야할지 모르지만 그랬습니다. 나는 이것이 제약 조건의 합병이라고 생각하지 않으며 그것이 재건이라고 의심한다.
이제이 두 가지가 생성하는 올바른 경로 : 나는 실제 수정이 무엇인지 확실하지 않다 결국
Html.ActionLink(Employee.Name, "Employee", new { EmployeeId = Employee.EmployeeId })
Html.ActionLink(Employee.Name, "Employee", "Administration", new { group = "Corporate", EmployeeId = Employee.EmployeeId }, null)
...
잠시 내 희망을 가지고 있지만 슬프게도 작동하지 않습니다. 헬퍼를 작성하는 방법은 다음과 같습니다.'Html.ActionLink (Employee.Name, "Employee", "Administration", new {group = "Corporate", EmployeeId = Employee.EmployeeId}, null)'; 그리고 그것이 생산하는 것은 다음과 같습니다 :'/ Administration/Corporate/Employee? EmployeeId = 8'. 도우미가 올바르게 작동하지 않는 것처럼 경로를 쓰는 것에 대해 논쟁 중입니다. – Gup3rSuR4c
경로는 어떻게 생겼습니까? 'Employee'는 경로 정의의 기본 동작입니까? 내 예를보세요. 내 경로 정의의 기본 동작은'Bar'이며, 이것은'ActionLink' 도우미에서 사용하는 것과 같습니다. –
위의 업데이트를 확인하십시오. – Gup3rSuR4c