리다이렉션에서 사용자 편집 페이지가 다시 호출하는 페이지

StackOverflow https://stackoverflow.com/questions/36733

  •  09-06-2019
  •  | 
  •  

문제

나는 프로젝트 관리 웹 응용 프로그램입니다.사용자가 다양한 방법으로 목록을 표시 작업입니다.목록을 볼 때 페이지에 그들은 다음 작업을 리디렉션하는 작업이 편집 페이지입니다.

기 때문에서 나오는 다양한 방법으로,나는 단지 호기심으로 방법 redirect 사용자는 다시 호출하는 페이지입니다.제가 몇 가지 아이디어를,그러나 같은 것을 얻을 다른 개발자 입력이 있습니다.

당신은 저장 전화 url 에서 세션?쿠키?내가 좋아하의 개념을 사용하는 개체 핸들 the redirection.

도움이 되었습니까?

해결책

나는 저장하는 참조 URL 을 사용하여 ViewState.저장 이 범위 외부 페이지(즉세션 상태 쿠키)문제를 일으킬 수 있습니다면 더 이상의 브라우저 창이 열립니다.

예 아래된 페이지가라고 내부적으로(즉요청하지 않은 직접)및 반송하여 추천 페이지 후 사용자가 그들의 반응이다.

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.UrlReferrer == null)
        {
            //Handle the case where the page is requested directly
            throw new Exception("This page has been called without a referring page");
        }

        if (!IsPostBack)
        {   
            ReturnUrl = Request.UrlReferrer.PathAndQuery;
        }
    }

    public string ReturnUrl
    {
        get { return ViewState["returnUrl"].ToString();  }
        set { ViewState["returnUrl"] = value; }
    }

    protected void btn_Click(object sender, EventArgs e)
    {
        //Do what you need to do to save the page
        //...

        //Go back to calling page
        Response.Redirect(ReturnUrl, true);
    }
}

다른 팁

이 메시지가 나의 태그 asp.net 그러나 내가 생각하는 플랫폼 독립적인 문제는 고통을 모두 새로운 웹 개발자들이 추구하는 깨끗한 작업을 수행하는 방법입니다.

나는 생각한 두 개의 옵션에 이를 달성하기습니다:

  1. Param url
  2. Url 에 저장되는 세션

내가 좋아하지 않는 url 에 방법,그것은 조금 지저분하고,당신을 기억해야를 포함 param 에는 모든 관련 URL.

나는 그냥 사용하는 개체와 정체되는 방법이다.체 것을 감싸는 세션 항목을 사용하여 저장을 리디렉션 URL.

방법은 아마 다음과 같습니다(모든 public static):

  • setRedirectUrl(string URL)
  • doRedirect(string defaultURL)

setRedirectUrl 것이라고 어떤 행동을 생산하는 링크/형식 필요가 있는 리디렉션된 url.그래서 당신이 말했 프로젝트 뷰 액션 목록을 생성하는 프로젝트의 각과 함께 작업을 수행할 수 있습니다 그들에(예를들면를 삭제,편집)을 호출하는 것 RedirectClass.setRedirectUrl("/프로젝트/보기 모든")코드에 대한 이동합니다.

다음 사이 말하는 사용자 삭제를 클릭하십 보기 페이지 후 삭제 조치,그래서 삭제 작업을 호출하는 것 RedirectClass.setRedirectUrl("/프로젝트/보기 모든").이 방법은 보이는 것이시 리다이렉션 변수에서 설정되었다.이 경우 리디렉션하는 URL 이 있습니다.하지 않을 경우,리디렉션 url(문자열을 전달하 setRedirectUrl 방법).

동의함으로"rmbarnes.myopenid.com"이 문제에 관한 것으로 플랫폼 독립적입니다.

나는 저장하는 전화 페이지의 URL 에서 쿼리문자열에 또는에서 숨겨진 분야(예를 들어에 ViewState 한 ASP.NET).는 경우 외부에 저장하는 페이지 범위(예:세션,세계 변수-응용 프로그램 상태)에 그것은 단지 과잉으로 말하지만 그것이 당신을 가져올 것이 문제입니다.

어떤 종류의 문제가?문제는 경우에는 사용자가 하나 이상의 탭(window)의 브라우저 열립니다.의 탭(또는 windows)의 동일한 브라우저를 공유하는 동일한 세션 리다이렉션이 되지 않을 것으로 예상하고 모든 사용자가 느끼는 그것이 버그가 아니다.

제 2eurocents..

나 개인적으로 저장하고 필요한 리다이렉션 정보 객체와 손잡이 세계적으로.나는 사용하지 않는 쿼리 문자열 param 또는 같은 이후 그들은 시도할 수 있습 튀는 자신의 페이지를 다시 그들은 가정하지 않는(가능한 보안 문제가?).를 만들 수 있습에 정적 방법을 처리하는 리다이렉션 개체할 수 있는 정보를 읽고 그에 따라 행동한다.이를 캡슐화하렉 프로세스 중 하나에서 페이지입니다.

를 사용하는 개체는 또한할 수 있음을 의미 나중에 확장할 필요한 경우(추가 같은 메시지를 반환하고 다른 정보).

예를 들면 다음과 같습니다(이것은 2 분 거친 지침 BTW!):

public partial class _Default : System.Web.UI.Page 
{

    void Redirect(string url, string messsage)
    {
        RedirectionParams paras = new RedirectionParams(url, messsage);
        RedirectionHandler(paras); // pass to some global method (or this could BE the global method)
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Redirect("mypage.aspx", "you have been redirected");
    }
}

public class RedirectionParams
{
    private string _url;

    public string URL
    {
        get { return _url; }
        set { _url = value; }
    }

    private string _message;

    public string Message
    {
        get { return _message; }
        set { _message = value; }
    }

    public RedirectionParams(string url, string message)
    {
        this.URL = url;
        this.Message = message;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top