按钮不想调用方法(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 没有人有任何想法如何解决这个错误,这是不符合逻辑?
Ghosty,
动态控制最好在页面生命周期的初始化阶段创建。正如理查德所说,他们也需要在页面的每一篇文章中创建。我建议将代码放在Page_Init事件处理程序中,确保将它放在任何现有的IsPostBack()检查之外。
请参阅here了解更多关于ASP.net Page生命周期的信息。
麦克
密钥创建在ASP.NET中动态控制时点是
1-控制应当在OnInit
创建或更好的是一个覆盖OnPreInit
2-控制应每次创建时都使用相同的ID创建
通过执行上述操作可以确保所有必需的ASP.NET管道工具都得到了处理。点1将确保这发生在每个页面请求/回传后,点2确保控制事件和视图状态等被正确映射。
好了,现在正在工作,我在OnInit部分调用了IzpisXML()方法,并且更改了Panel1的可见性以显示/隐藏标签&按钮。 :)
我想再次感谢大家,你们都非常感谢!:)
谢谢!