1
我有以下代碼,在正常按鈕的單擊事件上添加動態LinkButton。 LinkButtons需要一個EventHandler 「LinkButton_Click「
。由於事件處理程序需要註冊,而Page_Load/Page_Init
本身,我首先在Page_Load
(在回發方案)中添加所有可能的鏈接。 (總共有四個鏈接按鈕;根據業務場景,只有兩個將顯示在屏幕上)動態控件的事件處理程序的工作
代碼工作正常,事件處理程序在單擊事件中得到調用。
注意:業務場景是 - 如果當前時間的第二部分小於30,則需要顯示前兩個LinkButton;如果大於30,則需要顯示最後兩個LinkButton。
注:控件被清除,內PopulateLinksBasedOnCriteria()
方法再次添加
質詢
- 在
PopulateLinksBasedOnCriteria()
方法,我在新創建的鏈接按鈕實例。事件處理程序仍在開火。這是因爲在Page_Load
中添加的ID相同。有沒有任何MSDN參考證實這種行爲? (即事件處理程序將基於註冊的ID,而Page_Load/Page_Init
。即使控件被清除並再次添加,這將起作用) - 創建LinkButtons時出現重複代碼 -
Page_Load
和PopulateLinksBasedOnCriteria()
內部有一個內部代碼。有沒有更好的方式來實現這個業務任務沒有重複的代碼?
標記
<form id="form1" runat="server">
<div>
<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" />
<br />
<asp:PlaceHolder ID="plhDynamicLinks" runat="server"></asp:PlaceHolder>
</div>
</form>
後面的代碼
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
LinkButton lnk1 = new LinkButton();
lnk1.ID = "D1";
lnk1.Text = "A";
//Event handler must be registered in the Page_Load/Page_Init
lnk1.Click += new EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk1);
LinkButton lnk2 = new LinkButton();
lnk2.ID = "D2";
lnk2.Text = "B";
lnk2.Click += new EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk2);
LinkButton lnk3 = new LinkButton();
lnk3.ID = "D3";
lnk3.Text = "C";
lnk3.Click += new EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk3);
LinkButton lnk4 = new LinkButton();
lnk4.ID = "D4";
lnk4.Text = "D";
lnk4.Click += new EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk4);
}
}
protected void LinkButton_Click(object sender, EventArgs e)
{
PopulateLinksBasedOnCriteria();
LinkButton clickedControl = (LinkButton)sender;
Response.Write(DateTime.Now.ToString()+"___"+ clickedControl.ID + " Link Button Clicked");
}
protected void btnAdd_Click(object sender, EventArgs e)
{
PopulateLinksBasedOnCriteria();
}
private void PopulateLinksBasedOnCriteria()
{
plhDynamicLinks.Controls.Clear();
if (DateTime.Now.Second < 30)
{
LinkButton linkButton1 = new LinkButton();
linkButton1.ID = "D1";
linkButton1.Text = "1";
plhDynamicLinks.Controls.Add(linkButton1);
LinkButton linkButton2 = new LinkButton();
linkButton2.ID = "D2";
linkButton2.Text = "2";
plhDynamicLinks.Controls.Add(linkButton2);
}
else
{
LinkButton linkButton3 = new LinkButton();
linkButton3.ID = "D3";
linkButton3.Text = "3";
plhDynamicLinks.Controls.Add(linkButton3);
LinkButton linkButton4 = new LinkButton();
linkButton4.ID = "D4";
linkButton4.Text = "4";
plhDynamicLinks.Controls.Add(linkButton4);
}
}