按钮不想调用方法(ASP.NET - C#)

问题描述:

首先,我想感谢您花时间阅读我的问题,也许也帮助我。 :)按钮不想调用方法(ASP.NET - C#)

现在我的问题......我创建新的按钮与C#代码,并将其连接到我的小组名为Panel1的:

Button novgumb = new Button(); 
novgumb.Click += new EventHandler(ButtonOdstrani); 
novgumb.CommandArgument = "2"; 
novgumb.Visible = true; 
novgumb.Text = "Test"; 
Panel1.Controls.Add(novgumb); 

以这种方式创建的按钮,应该调用我的方法ButtonOdstrani:

public void ButtonOdstrani(object sender, EventArgs e) 
    { 
     string asd = ((Button)sender).CommandArgument; 
     //... 
    } 

现在,当我把按钮的代码为pageLoad的它工作正常,但是当我把它放在我的方法为里面书面方式在网站上的XML,以这种方式创建的按钮不会调用函数ButtonOdstrani:

protected void IzpisXML() 
    { 
     BranjeXML(); 
     string[] element = ime.Split('$'); 
     //Button gumbs = new Button(); 
     //gumbs.Click += new EventHandler(ButtonOdstrani); 
     //gumbs.Visible = true; 
     //gumbs.Text = ("Odstrani "); 
     //Panel1.Controls.Add(gumbs); 
     for (; z < stevec/2; z++) 
     {      
      string imeGostilne = element[i]; 
      string naslov = element[i + 1]; 
      string telefon = element[i + 2]; 
      string spletnaStran = element[i + 3]; 
      string odpiralniOD = element[i + 4]; 
      string odpiralniDO = element[i + 5]; 
      string boni = element[i + 6]; 

      Label labela = new Label(); 

      labela.Text = "<b>Ime gostilne:</b> " + imeGostilne + "<br /><b>Naslov:</b> " + naslov + "<br><b>Telefon:</b> " + telefon + "<br><b>Spletna stran:</b> " + spletnaStran + "<br><b>Odpiralni cas:</b> " + odpiralniOD + " - " + odpiralniDO + "<br /><b>Študnetski boni:</b> " + boni + "<br />"; 
      labela.Enabled = true; 
      labela.EnableTheming = true; 
      labela.EnableViewState = true; 
      labela.Visible = true; 
      labela.ID = ("Label" + (z + 1)); 
      Panel1.Controls.Add(labela); 

      Button novgumb = new Button(); 
      novgumb.Click += new EventHandler(ButtonOdstrani); 
      novgumb.CommandArgument = "2"; 
      novgumb.Visible = true; 
      novgumb.Text = "Test"; 
      Panel1.Controls.Add(novgumb); 

      Label hr = new Label(); 
      hr.Text = "<hr />"; 
      hr.Visible = true; 
      hr.Enabled = true; 
      hr.EnableTheming = true; 
      hr.EnableViewState = true; 
      Panel1.Controls.Add(hr); 
      i += 7; 

     } 
    } 

现在注意注释按钮之外的句子 - 它没有工作的方式。 “它没有工作”我的意思是,它没有调用ButtonOdstrani函数,它只是刷新了网站(PostBack)。

我真的很感谢任何建议的解决方案。


好了,现在我已经创建了以下内容:

private Button[] ButtonZaOdstranjevanje; 

    protected override void OnInit(EventArgs e) 
    { 
     ButtonZaOdstranjevanje = new Button[stevec/2]; 
     base.OnInit(e); 
     BranjeXML(); 

     for (int j=0; j < stevec/2; j++) 
     { 
      Button novgumb = new Button(); 
      novgumb.Click += new EventHandler(ButtonOdstrani); 
      novgumb.Visible = true; 
      novgumb.Text = "Odstrani gostilno"; 
      ButtonZaOdstranjevanje[j] = novgumb; 
     } 

    } 

但问题是,我得到一个错误:“索引数组的范围之外” 这个heppens在:

ButtonZaOdstranjevanje[j] = novgumb; 

因为stevec值是4,所以stevec/2 = 2,J参数设置为0 没有人有任何想法如何解决这个错误,这是不符合逻辑?

创建动态控件时,需要在每次回发时重新创建。

看到here

Ghosty,

动态控制最好在页面生命周期的初始化阶段创建。正如理查德所说,他们也需要在页面的每一篇文章中创建。我建议将代码放在Page_Init事件处理程序中,确保将它放在任何现有的IsPostBack()检查之外。

请参阅here了解更多关于ASP.net Page生命周期的信息。

麦克

密钥创建在ASP.NET中动态控制时点是

1-控制应当在OnInit创建或更好的是一个覆盖OnPreInit

2-控制应每次创建时都使用相同的ID创建

通过执行上述操作可以确保所有必需的ASP.NET管道工具都得到了处理。点1将确保这发生在每个页面请求/回传后,点2确保控制事件和视图状态等被正确映射。

好了,现在正在工作,我在OnInit部分调用了IzpisXML()方法,并且更改了Panel1的可见性以显示/隐藏标签&按钮。 :)

我想再次感谢大家,你们都非常感谢!:)

谢谢!