以下代碼塊允許用戶動態創建文本框控件。但是,在每次創建時,我想要添加一個刪除按鈕來刪除這個speficied文本框。我知道我可以通過在創建文本框時添加按鈕控件並將事件分配給相關按鈕來完成此操作。但是,這種行爲會導致不方便的情況,例如當您刪除文本框時,它有時會刪除最後一個文本框,有時會成功執行。我的問題是如何在創建的每個文本框附近添加一個按鈕,以便讓用戶在保留所有其他動態控件的同時移除創建的控件?如何在asp.net中刪除動態創建的文本框?
頭版:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicControls.aspx.cs" Inherits="MyAspnetApp.DynamicControls" EnableViewState="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"></head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btnAddTextBox" runat="server" Text="Add" OnClick="btnAddTextBox_Click" />
<asp:Button ID="btnWriteValues" runat="server" Text="Write" OnClick="btnWriteValues_Click" />
<asp:PlaceHolder ID="phControls" runat="server" />
</div>
</form>
</body>
</html>
後面的代碼:
using System;
using System.Web.UI.WebControls;
namespace MyAspnetApp
{
public partial class DynamicControls : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Recreate textbox controls
if(Page.IsPostBack)
{
for (var i = 0; i < TextBoxCount; i++)
AddTextBox(i);
}
}
private int TextBoxCount
{
get
{
var count = ViewState["txtBoxCount"];
return (count == null) ? 0 : (int) count;
}
set { ViewState["txtBoxCount"] = value; }
}
private void AddTextBox(int index)
{
var txt = new TextBox {ID = string.Concat("txtDynamic", index)};
txt.Style.Add("display", "block");
phControls.Controls.Add(txt);
}
protected void btnAddTextBox_Click(object sender, EventArgs e)
{
AddTextBox(TextBoxCount);
TextBoxCount++;
}
protected void btnWriteValues_Click(object sender, EventArgs e)
{
foreach(var control in phControls.Controls)
{
var textBox = control as TextBox;
if (textBox == null) continue;
Response.Write(string.Concat(textBox.Text, "<br />"));
}
}
}
}
那麼,我希望它能夠與那些非JavaScript的瀏覽器一起工作,再加上我想學習一些東西:)否則,用javascript做它會很容易,而且我會在頁面完全工作時包含javascript w/o js :)不管怎樣,你爲什麼不推薦? – Shaokan 2011-04-28 10:02:25
即使是移動的,目前也支持JavaScript。回傳重新加載整個頁面。因此,將一些工作負載從服務器移動到客戶端會更加明智。 – 2011-04-28 10:56:57