2017-04-10 8 views
1

asp.net 기반 웹 사이트에서 일부 동작을 진단하려고합니다. 다음은 시나리오입니다.ASP.Net Response.Redirect 뒤로 단추 에뮬레이트

사용자가 page1에 있으며 page2로 리디렉션되는 하이퍼 링크와 데이터로 GridView를 채우는 쿼리를 실행합니다.

사용자가 하이퍼 링크를 클릭하면 데이터를 편집 할 수있는 페이지 2로 리디렉션됩니다. 페이지 2의 맨 아래에는 사용자를 page1로 다시 가져 가야하는 취소 버튼이 있습니다.

취소 버튼을 사용하여 검색 결과가 채워진 page1에 사용자를 반환하고 싶습니다. 브라우저에서 뒤로 버튼을 클릭했지만 response.redirect로이 동작을 에뮬레이트 할 수없는 경우이 방법이 효과적입니다.

나는 다음과 같은 조합의 숫자 시도했다 :

reponse.redirect을 (request.url.tostring는())

모든 인스턴스는 페이지 2를 참조 PAGE1하지 보인다

의견이 있으십니까?

답변

1

이것은 사용중인 .net의 버전에 따라 약간 다릅니다. .net Core에는 요청 헤더에 필요한 정보가 있습니다.

Request.Headers["Referer"] 

이것은 전체 url에 쿼리 문자열이 있습니다. 이것을 컨트롤러에서 잡아서 뷰 모델의 값으로 설정할 수 있습니다 (또는 뷰 백에 넣을 수 있습니다).

if (Request.Headers.Keys.Contains("Referer")) 
    ViewBag.Referer = HttpContext.Request.Headers["Referer"]; 
else 
    ViewBag.Referer = ""; 

그런 다음보기에서 string.IsNullOrEmpty(ViewBag.Referer)을 사용하십시오. 나는 안전상의 이유로 수표를 추가했다. 왜 그들이 링크없이 페이지에 직접 나타나면?

Request.Headers.TryGetValue을 사용할 수도 있습니다. 중복 된 헤더가있을 수 있기 때문에 좀 더 안전하지만 실제로는 없어야합니다.

+0

안녕하세요, 응답 주셔서 감사합니다, 아직 작동하지 않습니다, 내가 무슨 일이 일어나는지 명확히하자. 몇 가지 중단 점을 추가했으며 약간 확장 할 수 있습니다. 페이지 2에서는 Page_Load 이벤트에 중단 점을 넣었고 request.headers ("Referer")를 인쇄하면 올바르게 page1을 참조합니다. 페이지 2에서 "뒤로"버튼을 사용하여 사용자를 page1로 되돌려 보내야합니다. 그러나 "뒤로"버튼을 클릭하면 page_load 이벤트가 발생하고 request.headers ("referer")는 page2를 가리 킵니다. 따라서 나는 페이지 1의 원래 쿼리로 사용자를 되돌릴 수 없습니다. – kevin

+0

"뒤로"버튼에 대한 코드를 게시하십시오. 당신이해야 할 일은 ViewBag에 저장 한 값을 단추처럼 앵커 태그의 href에 보내는 것입니다. 내 생각에 귀하의 버튼은 "제출"이며 양식을 제출하려고합니다. – nurdyguy

+0

"뒤로"버튼 이벤트에서 내가하고있는 것은 response.redirect를 호출하고 제안 된 값을 전달한 것입니다. 좀 더 조사한 후에 버튼이 포스트를 일으키는 지 확인해야한다고 생각하고 리퍼러를 지정하지 마십시오 – kevin