문제

당사 사이트에서는 방대한 양의 데이터베이스 생성 페이지를 생성하기 위해 URL 재 작성을 수행합니다. 모든 페이지에는 사용자를위한 로그인 컨트롤이 있습니다. 이와 같이:

내부 ASPX 페이지 : /db.aspx?id=123 사용자 표시 URL : /abc/123.aspx, /abc/456.aspx ... (url rewritten)

불행히도 각 페이지의 태그에는 "db.aspx? id = 123"의 동작 속성이 있습니다. 사용자가 버튼을 클릭하면 브라우저가 /abc/db.aspx?id=123에 게시되지 않습니다.

내가 시도한 솔루션 : 1. htmlform을 서브 클래싱하여 액션 속성을 변경합니다. 이것은 사이트의 다른 모든 형태를 파괴합니다. 2. 액션 속성을 제거하십시오 (브라우저가 항상 동일한 URL에 게시되도록). 이것은 다시 작성된 페이지에서 작동하지만 "/"(루트 DIR의 default.aspx)에서 동사 게시물이 허용되지 않는다는 메시지를 얻습니다 (IIS 6 및 매핑을 제어 할 수 없습니다).

아무도?

도움이 되었습니까?

해결책

Scott Gu 에서이 정말 멋진 블로그 게시물을 확인하십시오. http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx.

"구체적으로, 새로운 ASP.NET 2.0 컨트롤 어댑터 확장 성 아키텍처를 활용하여 컨트롤 렌더링을 사용자 정의하고"조치 "속성 값을 제공하는 값으로 재정의 할 수 있습니다. 코드를 변경할 필요는 없습니다. .aspx 페이지에서 "

섹션을 확인하십시오 : "URL 재 작성으로 ASP.NET POSTBACKS 처리"를 확인했습니다. 나는 그가 게시 한 어댑터를 성공적으로 사용했습니다.

추신. Cookieless 세션을 사용할 때 URL을 다시 작성할 때 ASP.NET에 몇 가지 문제가 있으며, 다시 작성한 URL은 원래 페이지보다 더 깊습니다. (/ABC/APAGE 대/DB?). 이 문제는 프레임 워크의 소스 코드에 맞춰야합니다. 해결 방법이 있지만 전체 주제입니다 (트레이드 오프와 함께 :( ... 같은 수준에서 갖고 싶을 수도 있습니다).

다른 팁

시맨틱은 어쩌면 어쩌면 행동 속성 = "db.aspx? id = 123"또는 "/db.aspx?id=123"? URL 다시 쓰기가 물리적 페이지에 대한 통과가 허용되면 문제가 될 수 있습니다.

나는 그것을 한 적이 없지만 반사판을 사용하여 코드를 보았고 이런 식으로 고칠 수 있다고 생각합니다.

페이지에서 :

this.Form.Action = null;

또는:

this.Form.SetAttribute("action", null);

그래도 작동하지 않으면 원하는 길을 설정합니다.

this.form.setattribute ( "action", "abc/123.aspx");

ASP.NET 3.5 SP1로 업그레이드하면 액션 속성은 이제 제대로 인식됩니다 그리고 할 수 있습니다 CodeBehind에서 설정합니다.

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