2012-04-30 3 views
4

데이터베이스에있는 모든 객체가있는 테이블이 있습니다. 내 Page_Load 함수에서로드합니다. 버튼을 클릭 할 때 텍스트 필드와 버튼이 있는데, 그 버튼의 핸들러가 db의 텍스트 필드에 쓰여진 이름을 가진 새로운 객체를 넣길 원합니다.page_load 전에 버튼 이벤트 핸들러를 실행하십시오.

이제는 클릭 한 후에 페이지의 새 항목이 페이지에 다시로드되는 것을 원합니다. 문제는 버튼 이벤트 핸들러가 Page_Load 함수 다음에 실행된다는 것입니다.

이 솔루션은 Page_Load에서 IsPostBack을 사용하거나 사전로드 기능을 사용하는 것입니다. 문제는 3 개의 다른 버튼이 있다면 3 개의 다른 편리한 기능 대신에 서로 다른 버튼을 사용해야한다는 것입니다.

이 문제가없는 솔루션은 무엇입니까?

코드 :

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Session["userId"] == null) 
       Response.Redirect("Login.aspx"); 

      // LOAD DATA FROM DB 
     } 

     protected void CreateObject(object sender, EventArgs e) 
     { 
      // SAVE THE NEW OBJECT 
     } 
+3

page_load 전에 이벤트를 클릭 할 수는 없지만 IsPostBack을 사용하여이 문제를 해결할 수있는 방법이 표시되지 않습니까? –

+0

버튼 통화가 12 번이면 어떨까요? 그러면 12 개의 함수 대신 12 개의 if 절이 생깁니다. – Vadiklk

+0

정말 이해하지 못한다면, 당신은 오직 하나만 가질 것입니다 : IsPostBack, 사실이라면 OnLoad에서 코드를 excecute하지 않으며, 버튼 클릭 이벤트는 비즈니스를 수행합니다. 버튼 클릭 이벤트는 여전히 발생합니다 –

답변

6

대신로드의 사전 렌더링 동안 데이터를로드하려고한다

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.PreRender += Page_PreRender 
     if (Session["userId"] == null) 
      Response.Redirect("Login.aspx"); 
    } 

    protected bool reloadNeeded {get; set;} 

    protected void CreateObject(object sender, EventArgs e) 
    { 
     // SAVE THE NEW OBJECT 
     reloadNeeded = true; 
    } 


    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     if(reloadNeeded || !IsPostBack) 
     // LOAD DATA FROM DB 
    } 
+0

나는 당신의 솔루션을 좋아하지만, 그것은 작동하지 않습니다. 함수를 입력하지만 처음에는 테이블에 데이터가 표시되지 않습니다. 아마도 Page_PreRender, LoadData를 호출했기 때문일 수 있습니다. – Vadiklk

+0

@Vadiklk : 전체 코드없이 대답하기가 어렵습니다. "LOAD DATA FROM DB"는 데이터 바인딩 부분 (컨트롤 DataSource 설정 및 DataBind 호출)을 포함한다고 가정합니다.로드하는 동안 여전히 바인딩의 일부를 수행하는 경우. 그것은 작동하지 않습니다. 또한 미리 렌더링은 보이지 않는 컨트롤에서 트리거되지 않습니다. – jbl

+0

LoadData 함수에서 바인딩을 수행합니다 (Page_PreRender 함수) – Vadiklk

1

당신은 이벤트 대상을 확인하고 다음 무엇을해야 할 수 있습니다

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack) 
    { 
     string eventTarget = Page.Request.Params["__EVENTTARGET"]; 
     if(whatever) 
     { 
      //do your logic here 
     } 
    } 
} 
어쩌면

Get control name in Page_Load event which make the post back

0

Page_PreRenderComplete 이벤트를 사용하여 테이블을 검색하십시오. 이렇게하면 모든 사용자 이벤트가 실행 된 후에 페이지에 항상 최신 데이터가 제공됩니다.

0

클릭 이벤트에서 가지고있는 것을 새로운 방법으로 이동하지 않는 이유는 무엇입니까? 그런 다음 해당 메소드를 페이지로드의 첫 번째 행으로 호출하십시오.

관련 문제