關於動態載入控制元件 事件觸發的問題
阿新 • • 發佈:2019-01-10
由於Web的"無狀態"本質,ASP.NET (Web Forms)專案動態載入使用者控制元件需要注意一些問題:
1. 在頁面的每次Postback,都要重新建立動態載入的使用者控制元件
2. 若需要維護動態使用者控制元件的狀態(ViewState)或者事件,在每次載入時,使用相同的ID。
MSDN上提供了一種參考的方式,override頁面的LoadViewState方法,因為該方法呼叫是在page_load事件之前,它可以保證這些動態控制元件在事件處理函式裡面是可用的。下面是一個很簡單的例子,例子很簡單,頁面上動態新增10個textbox,在viewstate裡面儲存一個標誌位,表示是否動態添加了這些控制元件,在LoadViewState函式裡進行判斷,如果有這個標誌,則重新載入這些控制元件。
3,下面是一個例子:
{
HtmlInputText username;
HtmlInputPassword pwd;
HtmlInputButton submit;
HtmlInputButton cancel;
HtmlGenericControl show;
protected void Page_Load(object sender, EventArgs e)
{
username = new HtmlInputText("text");
pwd = new HtmlInputPassword();
submit = new HtmlInputButton("submit");
submit.Value = "提交";
submit.ServerClick += new EventHandler(submit_ServerClick);//繫結事件
cancel = new HtmlInputButton();
cancel.Value = "取消";
show = new HtmlGenericControl("span");
HtmlTable table = new HtmlTable(); //四行的表格
HtmlTableRow row1 = new HtmlTableRow();
HtmlTableRow row2 = new HtmlTableRow();
HtmlTableRow row3 = new HtmlTableRow();
HtmlTableRow row4 = new HtmlTableRow();
table.Rows.Add(row1); //行新增到表格裡
table.Rows.Add(row2);
table.Rows.Add(row3);
table.Rows.Add(row4);
HtmlTableCell cell1 = new HtmlTableCell(); //定義單元格
cell1.ColSpan = 2;
row1.Cells.Add(cell1);
HtmlTableCell cell2 = new HtmlTableCell();
cell2.ColSpan = 2;
row2.Cells.Add(cell2);
HtmlTableCell cell3_1 = new HtmlTableCell();
HtmlTableCell cell3_2 = new HtmlTableCell();
row3.Cells.Add(cell3_1);
row3.Cells.Add(cell3_2);
HtmlTableCell cell4 = new HtmlTableCell();
cell4.ColSpan = 2;
row4.Controls.Add(cell4);
cell1.Controls.Add(username);
cell2.Controls.Add(pwd);
cell3_1.Controls.Add(submit);
cell3_2.Controls.Add(cancel);
cell4.Controls.Add(show);
HtmlGenericControl div = new HtmlGenericControl("div");
div.Style["Position"] = "absolute";
div.Style["left"] = "360px";
div.Style["top"] = "230px";
div.Style["border-style"] = "solid";
div.Style["border-width"] = "1px";
div.Style[HtmlTextWriterStyle.Padding] = "20px";
div.Controls.Add(table);
this.form1.Controls.Add(div);
}
void submit_ServerClick(object sender, EventArgs e)
{
if (username.Value == "張三" && pwd.Value == "123456")
{
Response.Redirect("http://www.baidu.com/");
}
else
{
show.Style["color"] = "red";
show.Style[HtmlTextWriterStyle.FontSize] = "14px";
show.InnerHtml = "使用者名稱或密碼錯誤!";
}
}
}