2012-09-06 2 views
2

나는 C#에서 동적 링크 버튼을 생성 중입니다. 그 중 하나를 클릭하면 다른 기능이 호출되어 어떤 링크 버튼이 클릭되었는지 보여줍니다. 그러나 클릭 할 때 호출되지 않습니다 어떤 링크 버튼의.링크 버튼의 클릭 기능이 호출되지 않습니다

이것은 어떻게 생성하는지입니다.

Int32 i; //create a integer variable 
for (i = 1; i <= 10; i++) // will generate 10 LinkButton 
{ 
LinkButton lb = new LinkButton(); //create instance of LinkButton 
lb.Text = Convert.ToString(i) + ""; //LinkButton Text 
lb.ID = Convert.ToString(i); // LinkButton ID’s 
lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument 
lb.CommandName = Convert.ToString(i); // LinkButton CommanName 
lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it. 
//type lb.Command += and press double time Tab Key it will generat the lb_Command() code 
PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder 
} 

이것은 기능 코드입니다.

void lb_Command(object sender, CommandEventArgs e) 
{ 
Label1.Text = e.CommandName; // will display the which Linkbutton clicked 
Label1.Text = "aaaa"; 
// Response.Redirect(“LnkBtn.aspx?val=” + Label1.Text); // you can also use as QueryString to send values to another page 
} 

도움을주십시오.

감사합니다.

+1

if(!Postback) 체크하지 않고, 거기에 코드를 이동하지만 이벤트가 원 ofr를 당신이 모든의하는 OnInit() 단계에서 그 버튼을 다시 작성하고 있는지 다시 게시 할 수 있도록 어쨌든 일하기 위해서는 페이지 수명주기에 일찌감치 유선 연결이 필요합니다. –

+0

나는 그것을 page_load의 if (! IsPostBack) 이벤트 안에 생성하고있다. 링크 버튼을 클릭하면 모든 링크 버튼이 사라집니다. – user1627138

+0

@ user1627138 페이지 수명주기에서 버튼을 일찍 만들지는 않습니다. 뷰 상태에 저장되지 않으므로 서버를 다시 게시 할 때 버튼이 있다는 것을 기억하지 못합니다. Eoin이 말했듯이, 여러분은'OnInit' 이벤트에 컨트롤을 추가 할 필요가 있습니다. 그리고 여러분은'! IsPostBack'뿐만 아니라 모든 단일 페이지로드시 컨트롤을 할 필요가 있습니다. – Servy

답변

2

클라이언트와 서버 측 코드가 혼합되어 있습니다. OnClientClick은 클라이언트 측 코드를 첨부하는 메소드입니다. lb_Command는 서버 측에서 실행됩니다.

사용 대신 클릭하십시오.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspxhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.click.aspx

+0

lb.command 여전히 작동하지 않았습니다. 어떤 링크 버튼을 클릭해도 hit가 발생하지 않았습니다. – user1627138

3

대 당신은 잘못된 이벤트를 사용하고 있습니다 :

ClientClick 그냥 클라이언트 측 이벤트가 자바 스크립트에 트리거됩니다.

은 당신이 원하는 것은 인 Click Event

[...] 당신은 여전히 ​​이벤트를 잡는하지 않는 경우

lb.Click += new CommandEventHandler(lb_Command); //Create Handler for it. 

, 다음 기회는 당신이 잘못된 시간에 동적으로하는 LinkButton 선언되어 있습니다 페이지 라이프 사이클 (Eoin Campbell이 그의 의견과 답변에서 언급 한 바와 같이).

그는 주제에 정말 좋은 article으로 연결됩니다. 왜 그 이벤트를 읽지 못했는지 이해해야합니다.

질문에 대한 의견과 다른 답변으로 판단 할 때 Page_Load 기능에서 버튼을 선언하고 있습니다. Page_Load는 페이지 수명주기에 너무 늦게 발생하기 때문에 작동하지 않습니다. 내가 이해에서

은, 지금 당신은 :

void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
      Int32 i; //create a integer variable 
      for (i = 1; i <= 10; i++) // will generate 10 LinkButton 
      { 
       LinkButton lb = new LinkButton(); //create instance of LinkButton 
       lb.Text = Convert.ToString(i) + ""; //LinkButton Text 
       lb.ID = Convert.ToString(i); // LinkButton ID’s 
       lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument 
       lb.CommandName = Convert.ToString(i); // LinkButton CommanName 
       lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it. 
       PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder 
     } 
    } 
} 

당신은 그 제거해야합니다. 대신 다음을 사용하십시오.

void Page_Init(object sender, EventArgs e) 
{ 
    Int32 i; //create a integer variable 
    for (i = 1; i <= 10; i++) // will generate 10 LinkButton 
    { 
     LinkButton lb = new LinkButton(); //create instance of LinkButton 
     lb.Text = Convert.ToString(i) + ""; //LinkButton Text 
     lb.ID = Convert.ToString(i); // LinkButton ID’s 
     lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument 
     lb.CommandName = Convert.ToString(i); // LinkButton CommanName 
     lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it. 
     PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder 
    } 
} 

위 링크 기사는 왜 그런지 설명합니다. 이해하는 것은 어려운 개념이지만 매우 중요한 개념입니다.

+0

onclick을 사용하면 오류가 발생합니다. - 오류 'System.Web.UI.WebControls.LinkButton.OnClick .EventArgs) '보호 수준으로 인해 액세스 할 수 없습니다. – user1627138

+1

OnClientClick은 문제의 일부일뿐입니다. OnClick을 사용한다고해도, 코드는 페이지 수명주기에 충분히 초기에 버튼을 생성하는 경우에만 작동합니다. –

+1

그는 처음에는 컴파일 오류가 발생하지 않았습니다. 그러나 그는 자신의 버튼을 클릭하는 것이 무엇이든 "나타나지"않는 ​​"홀수"런타임 동작을 계속할 것입니다. 그리고 그가 OnClick vs.동적 컨트롤로 작업 할 때 OnClientClick의 실수와 오해는 페이지 라이프 사이클에 매우 일반적입니다. 예 ... 언급할만한 가치가 있다고 생각합니다. –

-1

링크 버튼이 Button 클래스에서 상속되면 OnClick 이벤트에 연결해야합니다. ?

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=vs.100)

또는 대신

lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it. 

다음

lb.Command+= new CommandEventHandler(lb_Command); //Create Handler for it. 
사용하는 아래의 코드

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onclick.aspx

+0

이것은 윈도우 폼이 아니므로 ASP.NET – Servy

0

전체 코드는 다음과 같습니다. 그것은 내 끝을 실행합니다.

protected void Page_Load(object sender, EventArgs e) 
    { 
     Int32 i; //create a integer variable 
     for (i = 1; i <= 10; i++) // will generate 10 LinkButton 
     { 
      LinkButton lb = new LinkButton(); //create instance of LinkButton 
      lb.Text = Convert.ToString(i) + "&nbsp;"; //LinkButton Text 
      lb.ID = Convert.ToString(i); // LinkButton ID’s 
      lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument 
      lb.CommandName = Convert.ToString(i); // LinkButton CommanName 
      //lb.Click += lb_Click; //Create Handler for it. 
      lb.Command += lb_Command; 
      //type lb.Command += and press double time Tab Key it will generat the lb_Command() code 
      form1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder 
     } 

    } 

    void lb_Command(object sender, CommandEventArgs e) 
    { 
     Label1.Text = e.CommandName; // will display the which Linkbutton clicked    
    } 

감사합니다.

+0

입니다. exectly했지만 작동하지 않았습니다. – user1627138

+0

다음 lb.Command + = lb_Command를 사용해보십시오. – Nitesh

+0

lb_command 함수는 아무 것도 클릭하지 않고도 계속 히트를 얻지 못합니다. 링크 버튼을 클릭해도 버튼을 클릭하면 모든 링크 버튼이 보이지 않게됩니다. 이상한 행동 – user1627138

1

두가지. 다른 사람들은 LinkButtonCommand 또는 Click 처리기를 사용해야한다고 지적했기 때문입니다.

하지만 두 번째 문제는 당신은 당신의 컨트롤에

  1. 을 생성을 시도하여 페이지 수명주기 문제로 실행되는 경우 (! 다시 게시)을 Page_Load에서
  2. .

은이 읽기 : 그것은, 당신은 단지에 매 시간 (하지 귀하의 컨트롤을 생성한다 간단히 말해서 그물 1 http://www.4guysfromrolla.com/articles/092904-1.aspx

다시 모든 방법을 날짜 주제에 아주 좋은 기사입니다 초기 게시물) 및 이벤트 처리기 (+= 부분)를 페이지 수명주기에서 트리거하도록 시도 할 때까지 이벤트가 유선되도록 페이지 수명주기에 충분히 일찍 연결해야합니다.

무시 페이지의 OnInit 방법이 어디 아래에 언급 아니에요

+0

이벤트가 'OnClick'이 아니며 '클릭'입니다. – Servy

+0

오타 수정을 클릭하십시오. –

관련 문제