如何在asp.net中删除动态创建的文本框
本文关键字:创建 动态 文本 删除 asp net | 更新日期: 2023-09-27 17:53:14
下面的代码块允许用户动态创建文本框控件。但是,我想在每个创建中添加一个删除按钮来删除指定的文本框。我知道我可以通过在创建文本框时添加按钮控件并将事件分配给相关按钮来实现这一点。然而,这样的行为会导致不方便的情况,如当您删除文本框有时它会删除最后一个文本框,有时它会执行成功。我的问题是,我如何在每个文本框附近添加一个按钮,让用户删除创建的控件,同时保留所有其他动态控件?
首页:
<%@ 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 />"));
}
}
}
}
如果你想在ASP中动态地添加和删除控件。. NET,你必须阅读Dave Reed关于它的优秀和权威的文章:"真正理解动态控制"。
如果你不理解所涉及的问题——比如在每次对页面的请求时必须完全重建树的控制——那么你就会陷入一个痛苦的世界。一旦你理解了这些问题,你就会成为一个更好的ASP。. NET开发人员(至少我是)。好运!基斯
我已经解决了这个问题。诀窍是让它不可见,而不是在用户点击删除按钮时删除控件。
我建议您不要通过Full PostBack这样做。你最好在客户端用Javascript隐藏。
如果您需要保存一些"状态"服务器端,使用AJAX Postbacks AKA XHR与服务器通信。(我只是讨厌翻页,哈哈)
顺便说一句,这是一个完美的这类东西的fwk:http://examples.ext.net//事件/DirectMethods/概述/
<asp:repeater>
可能是您正在搜索的。然后delete按钮的click处理程序将只删除父元素(这将删除整个重复元素),而add处理程序将添加另一个元素。