在局部刷新时,动态创建多个TextBox后,如何保存TextBox的Text属性的值?
大家好,请教一个问题:
在局部刷新时,动态创建多个TextBox后,如何保存TextBox的Text属性的值?
[解决办法]
给你写了一个例子:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestAddText.aspx.cs" Inherits="TestAddText" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="插入Txt" />
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="选择最大" />
<asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="删除最大" />
<hr />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
<hr />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="回发测试" />
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web.UI.WebControls;
public partial class TestAddText : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.PlaceHolder1.Controls.Clear();
foreach (var id in IDs)
{
var txt = new TextBox { ID = id };
this.PlaceHolder1.Controls.Add(txt);
txt.TextChanged += txt_TextChanged;
}
}
void txt_TextChanged(object sender, EventArgs e)
{
var txt = (TextBox)sender;
ClientScript.RegisterStartupScript(this.GetType(), "txt_改变",
"alert('修改了" + txt.ID + "');", true);
}
private Color[] cs = new Color[] { Color.Black, Color.Blue, Color.Green, Color.Gold };
/// <summary>
/// 插入新的textbox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
var id = Guid.NewGuid().ToString("n");
var txt = new TextBox
{
ID = id,
Text = new Random().Next(1, 100).ToString(),
Width = new Unit(20),
ForeColor = cs[new Random().Next(cs.Length)]
};
this.PlaceHolder1.Controls.Add(txt);
IDs.Add(id);
ClientScript.RegisterStartupScript(this.GetType(), "Button_Click haha",
"alert('增加了" + txt.ID + "');", true);
txt.Attributes["初始化颜色"] = txt.ForeColor.ToArgb().ToString();
}
private List<string> IDs
{
get
{
var ret = (List<string>)ViewState["ids"];
if (ret == null)
{
ret = new List<string>();
ViewState["ids"] = ret;
}
return ret;
}
}
private string SelectedID
{
get
{
return (string)ViewState["st"];
}
set
{
ViewState["st"] = value;
}
}
/// <summary>
/// 随便回发一下,什么也不干
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(this.GetType(), "Button2_Click",
"alert('hi');", true);
}
private uint GetValue(TextBox ctrl)
{
uint x;
if (uint.TryParse(ctrl.Text, out x))
return x;
else
return 0;
}
private TextBox 最大txt()
{
var lst = (from id in IDs
let tb = (TextBox)this.form1.FindControl(id)
let value = GetValue(tb)
where value > 0
select new { txt = tb, value }).ToList();
return lst.Aggregate((x, y) =>
{
if (GetValue(x.txt) > GetValue(y.txt))
return x;
else
return y;
}).txt;
}
//选择新的最大值
protected void Button3_Click(object sender, EventArgs e)
{
if (IDs.Count == 0)
return;
var sid = SelectedID;
if (sid != null)
{
var txt = (TextBox)this.PlaceHolder1.FindControl(sid);
if (txt != null)
{
txt.ForeColor = Color.FromArgb(int.Parse(txt.Attributes["初始化颜色"]));
txt.Style.Remove("font-size");
}
}
var mt = 最大txt();
mt.ForeColor = Color.Red;
mt.Style["font-size"] = "2cm";
SelectedID = mt.ID;
}
//移除最大值
protected void Button4_Click(object sender, EventArgs e)
{
if (IDs.Count == 0)
return;
var mt = 最大txt();
IDs.Remove(mt.ID);
this.PlaceHolder1.Controls.Remove(mt);
}
}