Bài viết này cho thấy làm thế nào để tạo điều khiển động trong ASP.Net và làm thế nào để đọc các giá trị điều khiển động tạo ra trong ASP.NET.
Tôi đã tìm và thấy nhiều cách khác nhau trên nhiều trang web, nhưng không thấy làm thế nào để đọc các giá trị của điều khiển động tạo ra, chỉ làm thế nào để tạo ra các điều khiển động trong ASP.Net. Vì vậy, hôm nay tôi sẽ chỉ cho làm thế nào để tạo ra các điều khiển động trong ASP.Net và làm thế nào để đọc các giá trị điều khiển động sử dụng ASP.NET. Trong bài viết này, tôi đã tự động tạo ra các control "TextBox", "DropDownList", "RadioButtonList" và "CheckBoxList".
Để hiểu rõ hơn, xin vui lòng tải về mã nguồn bài viết này.
Mã ASPX
<td colspan="2" style="background-color: #EEEEEE;">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</td>
</tr>
</table>
</td>
Mã C#
public void createDynamicTextBox(string _TextBoxId)
{
HtmlGenericControl tr = new HtmlGenericControl("tr");
HtmlGenericControl td1 = new HtmlGenericControl("td");
Label lbl = new Label();
lbl.ID = "lbl" + _TextBoxId.Replace(" ", "").ToLower();
lbl.Text = _TextBoxId;
td1.Controls.Add(lbl);
tr.Controls.Add(td1);
HtmlGenericControl td2 = new HtmlGenericControl("td");
TextBox txtBox = new TextBox();
txtBox.ID = _TextBoxId.Replace(" ", "").ToLower();
td2.Controls.Add(txtBox);
tr.Controls.Add(td2);
PlaceHolder1.Controls.Add(tr);
}
Đọc Value từ Textbox
TextBox txt = (TextBox)PlaceHolder1.FindControl("TextBox");
lblValue.Text = txt.Text;
Tạo DropDownList và đọc Value của nó:
public void createDynamicDropDownList(string _ddlId)
{
HtmlGenericControl tr = new HtmlGenericControl("tr");
HtmlGenericControl td1 = new HtmlGenericControl("td");
Label lbl = new Label();
lbl.ID = "ddl" + _ddlId.Replace(" ", "").ToLower();
lbl.Text = _ddlId;
td1.Controls.Add(lbl);
tr.Controls.Add(td1);
HtmlGenericControl td2 = new HtmlGenericControl("td");
DropDownList ddl = new DropDownList();
ddl.ID = _ddlId.Replace(" ", "").ToLower();
ddl.SelectedIndexChanged += ddl_SelectedIndexChanged;
ddl.AutoPostBack = true;
ddl.Items.Add(new ListItem("-- Select --", "-- Select --"));
ddl.Items.Add(new ListItem("DropDown Option One", "Option One"));
ddl.Items.Add(new ListItem("DropDown Option Two", "Option Two"));
ddl.Items.Add(new ListItem("DropDown Option Three", "Option Three"));
td2.Controls.Add(ddl);
tr.Controls.Add(td2);
PlaceHolder1.Controls.Add(tr);
}
DropDownList ddl = (DropDownList)PlaceHolder1.FindControl("DropDownList");
lblValue.Text = ddl.SelectedValue;
Chỉ định sự kiện SelectedIndexChange đến DropDownList
Thêm sự kiện "ddl_SelectedIndexChanged" vào dropdownlist động bằng cách sử dụng đoạn mã sau:
public void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
var ddl = (DropDownList)sender;
if (ddl.SelectedIndex > 0)
{
lblValue.Text = ddl.SelectedValue;
}
}
Cách để tạo ra RadioButtonList động và đọc giá trị của nó.
public void createDynamicRadioButtonList(string _RadioButtonListID)
{
HtmlGenericControl tr = new HtmlGenericControl("tr");
HtmlGenericControl td1 = new HtmlGenericControl("td");
Label lbl = new Label();
lbl.ID = "lbl" + _RadioButtonListID.Replace(" ", "").ToLower();
lbl.Text = _RadioButtonListID;
td1.Controls.Add(lbl);
tr.Controls.Add(td1);
HtmlGenericControl td2 = new HtmlGenericControl("td");
RadioButtonList RadioButtonList = new RadioButtonList();
RadioButtonList.ID = _RadioButtonListID.Replace(" ", "").ToLower();
RadioButtonList.Items.Add(new ListItem("Radio Option One", "Option One"));
RadioButtonList.Items.Add(new ListItem("Radio Option Two", "Option Two"));
RadioButtonList.Items.Add(new ListItem("Radio Option Three", "Option Three"));
td2.Controls.Add(RadioButtonList);
tr.Controls.Add(td2);
PlaceHolder1.Controls.Add(tr);
}
Đọc Value từ RadioButtonList
string value = "";
RadioButtonList RadioButtonList = (RadioButtonList)PlaceHolder1.FindControl("RadioButtonList");
foreach (ListItem item in RadioButtonList.Items)
{
if (item.Selected)
value = value + item.Text + "<br>";
}
lblValue.Text = value;
Tạo CheckBoxList động và đọc Value:
public void createDynamicCheckBoxList(string _CheckBoxListID)
{
HtmlGenericControl tr = new HtmlGenericControl("tr");
HtmlGenericControl td1 = new HtmlGenericControl("td");
Label lbl = new Label();
lbl.ID = "Check Box List" + _CheckBoxListID.Replace(" ", "").ToLower();
lbl.Text = _CheckBoxListID;
td1.Controls.Add(lbl);
tr.Controls.Add(td1);
HtmlGenericControl td2 = new HtmlGenericControl("td");
CheckBoxList CheckBoxList = new CheckBoxList();
CheckBoxList.ID = _CheckBoxListID.Replace(" ", "").ToLower();
CheckBoxList.Items.Add(new ListItem("CheckBox Option One", "Option One"));
CheckBoxList.Items.Add(new ListItem("CheckBox Option Two", "Option Two"));
CheckBoxList.Items.Add(new ListItem("CheckBox Option Three", "Option Three"));
td2.Controls.Add(CheckBoxList);
tr.Controls.Add(td2);
PlaceHolder1.Controls.Add(tr);
}
Đọc Value từ CheckBoxList
string val = "";
CheckBoxList CheckBoxList = (CheckBoxList)PlaceHolder1.FindControl("CheckBoxList");
foreach (ListItem item in CheckBoxList.Items)
{
if (item.Selected)
val = val + item.Text + "<br>";
}
lblValue.Text = val;
Control động sẽ bị mất dữ liệu éau khi post-back trang hoặc Giữ lại trạng thái về control động trong ứng dụng ASP.NET. Trước khi chúng ta tiếp tục, chúng ta cần phải ghi nhớ một điều. Khi bạn tạo điều khiển động trong trang và nếu bạn post-back thì điều khiển được tạo ra sẽ bị mất. Tôi muốn nói rằng: "Khi sử dụng điều khiển năng bạn phải nhớ rằng chúng sẽ chỉ tồn tại cho đến khi post-back. ASP.NET sẽ không tái tạo điều khiển động lần nữa". Bạn cần phải tạo lại tất cả các điều khiển động tạo ra trên mỗi post-back(trong trường hợp tải chậm nhất). Bạn cũng cần phải đảm bảo rằng chúng nhận được cùng một ID như trước để kích hoạt sự kiện và duy trì View State.
Để thể hiện vấn đề này tôi đã sử dụng đoạn mã sau:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
generateDynamicControls();
}