动态创建按钮以调用方法并传入参数

我有一个带有键值对的字典,需要遍历这些对并为每个对创建一个按钮,并连接按钮以调用方法DisplayDocument(字符串Id)并传入Key作为参数。

这是我到目前为止所拥有的。

// test data var documents= new Dictionary(); documents.Add("69110","Diploma"); documents.Add("76404", "Licensure"); foreach (KeyValuePair item in documents) { MyStringBuilder=MyStringBuilder.Append(item.Value + " " + item.Key + "
"); } printFaxDocuments.InnerHtml = MyStringBuilder.ToString();

我想要做的是打印文档键和值,然后打印一个按钮,用户可以单击该按钮查看文档。 我有为查看文档而构建的方法,它需要传入Key值。我该怎么做?

我不确定如何在文本数据中穿插按钮。 我需要写出键和值添加按钮添加"
"
然后再次为字典中的下一项做同样的事情。

下面我在OnInit方法中创建了Button控件,并为每个控件分配了相同的Click事件处理程序。

Key存储在Buttons CommandArgument属性中,该属性在事件处理程序中检索并传递给DisplayDocument方法。

 protected override void OnInit(EventArgs e) { // test data var documents = new Dictionary(); documents.Add("69110", "Diploma"); documents.Add("76404", "Licensure"); foreach (KeyValuePair item in documents) { Button button = new Button(); button.Text = string.Format("Button: {0}", item.Key); button.CommandArgument = item.Key; button.Click += ButtonClicked; ButtonContainer.Controls.Add(button); } base.OnInit(e); } protected void ButtonClicked(object sender, EventArgs e) { Button button = (Button) sender; string id = button.CommandArgument; DisplayDocument(id); } private void DisplayDocument(string id) { //Do something } 

编辑

您可能最好使用CSS来设置按钮的布局。

尝试将以下CSS类添加到页面的头部(或样式表文件)

  

然后将以下内容添加到按钮创建代码中:

 button.CssClass = "stacked-button"; 

然后,您可以根据需要添加到CSS类以修改布局(边距等)

希望这可以帮助。

如果你想传递更复杂的东西, 这篇文章演示了一种稍微强大的传递参数的方法。

添加click事件处理程序:

 button1.Click += delegate(object sender, EventArgs e) { button_Click(sender, e, "String or other types eg, enum..", SomeCustomEnum.SomeSelection); }; 

然后只需将参数添加到单击处理程序方法:

 void button_Click(object sender, EventArgs e, string messageButCanBeIntEtc, SomeCustomEnum type) { // do things }