我正在动态创建一些链接按钮,并试图在后面的代码中的一些其他功能中访问它们但面临一些问题 我正在做的是页面加载事件
for (int i = 65; i <= 90; i++)
{
LinkButton lbtnCharacters = new LinkButton();
lbtnCharacters.Text = "<u>" + Char.ConvertFromUtf32(i) + "</u>";
lbtnCharacters.ID = Char.ConvertFromUtf32(i);
lbtnCharacters.CommandArgument = Char.ConvertFromUtf32(i);
lbtnCharacters.CommandName = "AlphaPaging";
lbtnCharacters.CssClass = "firstCharacter";
lbtnCharacters.Click += new EventHandler(lbtnAlphabets_Click);
alphabets.Controls.Add(lbtnCharacters);
}
由于有多个链接按钮,所以我已经为它们分配了唯一的ID,但我没有得到如何在代码后面的其他功能中访问它们。还有一件事,我添加所有链接按钮的“字母”是一个div任何人都可以告诉我如何访问它们
答案 0 :(得分:4)
如果您想在CodeBehind中访问它们,您唯一真正的选择就是使用FindControl
:
LinkButton aButton = (LinkButton)alphabets.FindControl("a");
LinkButton bButton = (LinkButton)alphabets.FindControl("b");
LinkButton cButton = (LinkButton)alphabets.FindControl("c");
答案 1 :(得分:0)
您可以使用FindControl方法获取控件。
LinkButton aControl = (LinkButton)Page.FindControl("a");
答案 2 :(得分:0)
我认为这有两个部分。
首先,当您向.aspx页面添加控件时,visual studio会自动为这些控件创建属性(您可以通过查看aspx.designer.cs文件在某些版本的asp.net中看到这一点 - 您应该看到属性与aspx文件中的每个控件有关。)
当您动态添加控件时,控件不会添加到类中。因此,您需要手动跟踪它们。也许创建一个类级别的字段/属性并将它们存储在其中。在你的情况下可能值得使用词典:
private Dictionary<int, LinkButton> alphabetLinkButtons = new Dictionary<int, LinkButton>();
这应该允许您通过在page_load期间调用的其他代码中的id访问任何链接按钮:
˚F
or (int i = 65; i <= 90; i++)
{
LinkButton lbtnCharacters = new LinkButton();
lbtnCharacters.Text = "<u>" + Char.ConvertFromUtf32(i) + "</u>";
lbtnCharacters.ID = Char.ConvertFromUtf32(i);
lbtnCharacters.CommandArgument = Char.ConvertFromUtf32(i);
lbtnCharacters.CommandName = "AlphaPaging";
lbtnCharacters.CssClass = "firstCharacter";
lbtnCharacters.Click += new EventHandler(lbtnAlphabets_Click);
alphabets.Controls.Add(lbtnCharacters);
// add this
alphabetLinkButtons.Add(lbtnCharacters);
}
现在,稍后在您的代码中,您应该能够访问这样的控件:
alphabetLinkButtons[65].Text = "Some new text";
现在点2 ...这些按钮在回发时不会存在。
页面的ViewState是在页面生命周期的Initialize事件中创建的,因此通过在page_load期间将控件添加到页面,它们永远不会添加到视图状态,因此您无法在回发中访问它们事件。这可能不会给你带来任何问题,但要注意它。有很多帖子可以解决这个问题 - 只需搜索“动态添加控件viewstate page_load initialize”。
以下是此问题的good discussion。
希望这有帮助