2010-08-23 3 views
1

LinkButton이 페이지의 Page_Load에서 클릭되었는지 확인하는 방법은 무엇입니까? 서비스에 대한 호출을 피하여 해당 이벤트에있는 것만 실행합니다.Page_Load에서 asp.net에서 클릭 한 LinkButton을 확인하는 방법

+1

왜 페이지로드에 있어야합니까? 왜 각 링크 버튼에 대해 별개의 이벤트 처리기를 가지고 있지 않고 그 기능을 처리해야합니까? – Tommy

+0

페이지로드 실행이 링크와 관련이 없습니다. – batwadi

+3

죄송합니다.하지만 귀하의 요구 사항은 잘못된 디자인에 대한 해결 방법처럼 들립니다. 나는 당신이 asp.net의 개념에 대해 읽어 줄 충고를 원할 것이다. 좋은 시작은 Kelsey의 대답입니다. – Scordo

답변

0

페이지의 다른 포스트 백 이벤트가 실행될 때 Page_Load 코드가 실행되지 않도록하려는 것입니까? (이것은 웹폼 이벤트 모델에 의해 필요로 해킹의 비트입니다 이럴하지만, 그게 그거입니다.)

if (!IsPostBack) 

을 아니면 내가 질문을 오해하고있다 : 그런 경우에는, 그것을 포장 ? 내가 이벤트 처리기에서 너무 늦기 때문에,이 작업을 수행해야하는 데 사용

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx

1

:

특정하는 LinkButton을 식별에 관해서는, 당신은 명령 이름의 매개 변수를 사용할 수 있습니다. 자바 스크립트를 사용하여 숨겨진 필드에 클릭 한 버튼의 ID를 쓸 수 있습니다. Page_Load에서 검색 할 수 있습니다. 다른 방법은 내가 정확히 기억한다면 _EVENTTARGET 숨겨진 필드를 살펴 보는 것입니다.

0

LinkButton (또는 Control 또는 기타) 유형의 변수를 선언하고 click 이벤트에서 버튼에 대한 참조로 버튼을 업데이트 한 다음 Load에서 값을 확인할 수도 있습니다.

7

Page_Load에서 실행해야하는 유일한 작업은 항상 everyt 요청으로 발생시키려는 코드입니다. 또는 한 번만 실행하려는 코드를 포스트 백 확인에 넣습니다. 예를 들어 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Put the all code you need to run with EVERY request here 

    // Then add a post back check for any code you want to ONLY run on the very 
    // first request to the page. 
    if (!IsPostBack) 
    { 
     // Code you only want to run the first time. Usually setup code to initalize 
     // DropDownLists, Grids or pre populate a form, etc... 
    } 
} 

귀하의 LinkButton 코드는 클릭 핸들러에 자신의 모든이어야한다 : 이제

protected void yourLinkButton_Click(object sender, EventArgs e) 
{ 
    // code you want to execute when your button is clicked. This will run AFTER 
    // the Page_Load has finished. 
} 

당신은 통제의 GridView, Repeater 또는 일부 유형에 사용되는 바인딩을 필요로 LinkButton 경우 이를 채우려면 RowCommand 이벤트 핸들러를 구현하여 LinkButton이 눌려 졌는지 파악해야 할 것입니다. 또한 데이터를 CommandArgument 속성에 바인딩하여 고유 한 행 특정 데이터를 짝수 처리기에 전달할 수 있습니다.

정확히 동일한 처리기를 사용하여 LinkButton 개의 묶음이있는 경우 최악의 시나리오는 sender을 캐스팅 한 다음 ID 값을 비교하는 것입니다.

protected void yourLinkButton_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)(sender); 
    if (btn.ID.Equals("Some control name you want to compare")) 
    { 
     // do something 
    } 
} 

질문에 표식을 벗어난 경우 댓글을 남겨두면 시도해 보겠습니다.

편집 : 당신이 때문에 다른 제약에 Page_Load에있는 Button 알고있다처럼는 귀하의 의견을 바탕으로 소리가 난다. 음, Page_Load에서 그것을 수행하는 깨끗한 방법은 없지만 수행 할 수 있습니다. Request.Form 키를 확인하고 특정 버튼 이름 (클릭 된 Button 만 키에 포함되어야 함)을 확인해야합니다.예 :

if (Request.Form.AllKeys.Contains("yourButton1")) 
{ 
    // then do something based on yourButton1 
} 
else if (Request.Form.AllKeys.Contains("yourButton2")) 
{ 
    // then do something based on yourButton2 
} 
// etc... 

나는 주위를 둘러 쌀 수있는 다른 깨끗한 방법이라고 생각하지 않습니다. 프레임 워크에 sender 속성 중 하나에서 포스트 백을 발생시킨 컨트롤이 포함 된 경우 좋을 것입니다.

다른 편집 : 이것은 내 마음이 완전히 미끄러졌습니다. 위의 편집은 Button에 대한 것이므로 __EVENTTARGET을 채우지 않았기 때문에 편집했습니다. 당신이 LinkButton을 사용하고 있기 때문에 당신은 다시 게시 원인 제어 얻기 위해 다음을 사용할 수 있습니다 : 나는 LinkButton으로이 테스트하고 예상대로 작업을 수행

string controlNameThatCausedPostBack = Request.Form["__EVENTTARGET"]; 

. 마지막으로 문제를 :) 해결

희망

+0

Kelsey에게 감사드립니다. 나는 같은 방식으로 구현했을 것이다. 문제는 내 페이지에있다. 페이지로드에서 페이지 매김을하고 숨겨진 필드 값을 확인하고있다. ... 나는 매우 나쁜 디자인을 알고 있지만 이미 구현되어 있으므로 변경할 수 없다. – batwadi

+0

@ prakash 필자는 당신의 마음을 끌어 올려야 할 몇 가지 코드를 포함시키기 위해 제 대답을 업데이트했습니다. 도움이 더 필요하면 알려주세요. – Kelsey

+0

시간을 주셔서 고맙습니다.하지만 문제는 LinkButton이 Request 매개 변수에 들어 있지 않습니다. 내 knoledge 버튼 ID가 요청 매개 변수에 들어옵니다. 제발 조언을 – batwadi

0

별도의 핸들러는 여기에 갈 수있는 방법입니다,하지만 당신은 각 버튼을 필요한 사람들의 고유 ItemCommand 특성, 필터를 줄 수 있습니다.

1
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (IsPostBack && Request.Form["__EVENTTARGET"] == LinkButton1.UniqueID) 
    { 
    // LinkButton1 was clicked 
    } 
} 
관련 문제