문제

제 생각에는 ASP MVC 1.0에서 처리해야 할 복잡한 URL이 있습니다.대부분의 컨트롤러에서 수행하는 모든 작업에는 항상 두 가지 매개변수가 필요합니다.계정 및 프로젝트.이는 각 작업의 요구 사항보다 우선합니다.이는 일반적인 URL이 다음과 같다는 것을 의미합니다.

http://abcd.com/myaccount/projects/project_id/sites/edit/12

이 예에서는 다음과 같습니다.내 계정 계정 이름입니다. 프로젝트 컨트롤러가 될 수 있으며 다른 옵션은 다음과 같습니다. 위치, 직원. 프로젝트_ID 내의 프로젝트 ID입니다. 내 계정, 사이트 컨트롤러가 될 수도 있고 다른 옵션은 다음과 같습니다. 직원 또는 지불. 편집하다 행동이고 12 편집된 사이트의 ID입니다.(이것이 충분히 명확하기를 바랍니다)

이제 한 가지 옵션은 경로를 생성하고 모든 작업에 두 개의 추가 매개변수를 추가하여 컨트롤러의 모든 작업에 project_id 및 account를 전달하는 것입니다.이는 실제로 바람직하지 않으며 두 컨트롤러(프로젝트 및 사이트)가 여기서 작동할지 확신할 수 없습니다.

내 이상적인 상황은 컨트롤러 작업 호출과 함께 이동하는 일종의 컨텍스트를 사용하고 거기에 project_id 및 myaccount를 저장하는 것입니다.나머지 매개변수는 다음과 같은 일반적인 방법으로 처리할 수 있습니다.

// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}

이런 일이 어떻게/어디서 ​​일어날 수 있는지에 대한 아이디어가 있나요?또한 이것이 ActionLink와 어떻게 작동할까요(예:이 컨텍스트를 기반으로 올바른 링크를 생성합니까?

감사해요!

도움이 되었습니까?

해결책

먼저 다음과 같은 경로에 토큰을 추가해야 합니다. {company}/projects/{project}{controller}/{action}/{id}.그런 다음 자신만의 IControllerFactory를 작성한 경우 생성자를 통해 RouteData의 값을 컨트롤러로 푸시하는 것이 매우 쉬울 것입니다.아마도 시작하는 가장 쉬운 방법은 DefaultControllerFactory를 하위 클래스로 만들고 CreateController 메서드를 재정의하는 것입니다.

다른 팁

이것은 나에게 전혀 이해가 되지 않습니다.다음과 유사한 경로가 있는 이유는 무엇입니까?

{controller}/{id}/{controller}/{id}

?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top