
我简单看了下 实际上的一个主要问题就是动态控件状态在回传后的保存问题 即你动态创建了一个控件 在回传后却发现控件不见了或者被新的覆盖了!
要解决这个问题很简单 只要保存控件的视图状态就可以了 我们可以用viewstate来保存 也可以用静态变量来保存 由于aspx页面周期在每次load事件里都会还原视图数据 所以后台添加的控件会被从清理掉 需要手工编码恢复 下面是一个简单示例 当然你可以使用viewstate 我用的静态变量
aspx前台代码:
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="button1" runat="server" Text="创建" onclick="Button1_Click" />
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
<asp:Button ID="id2" runat="server" Text="获取所有值" onclick="id2_Click" />
</div>
</form>
</body>
后台代码:
public partial class _Default : SystemWebUIPage
{
protected void Page_Load(object sender, EventArgs e)
{
//还原控件
RestoreTextBox();
}
//静态变量存储控件列表
static List<TextBox> txtlist = new List<TextBox>();
//控件id
static int id = 1;
protected void Button1_Click(object sender, EventArgs e)
{
var txt = new TextBox
{
ID=idToString(),
Text="Sample textbox " + idToString()
};
thisPanel1ControlsAdd(txt);
txtlistAdd(txt);
//id自增1
id++;
}
/// <summary>
/// 还原控件
/// </summary>
void RestoreTextBox()
{
foreach (var item in txtlist)
{
if (item != null)
{
thisPanel1ControlsAdd(item);
}
}
}
/// <summary>
/// 读取textbox的值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void id2_Click(object sender, EventArgs e)
{
foreach (Control item in Panel1Controls)
{
if (item is TextBox)
{
ResponseWrite((item as TextBox)Text+"</br>");
}
}
}
}
请LZ说清一点,有点不解
JS修改Repeater内的TextBox?
是修改控件还是内容呢?
为什么要修改呢??
用JS修改后重新返回TextBox里的值,然后把其他列和修改后的TextBox依次加入到list中,在用DataTable绑定list
我想问一下,你要的是不是这种效果(甭管用什么方法)
就是在后台遍历出你所要求的一些,然后,点击textbox,会d出一个QQ表情浮动层,浮动层里面有你刚才遍历的那些,你点击其中的某一个,就会把该放到textbox里面,然后留言发表
如果是这样,那给你一个方案,跟你的思路不太一样,我只说思路,不写代码
把遍历出来,放到一个div里面,然后,在textbox的onBlur事件里面写上一个js方法,显示该层,在onFocus事件里面写上隐藏该层,至于把div放到哪,用eventx和eventy获取textbox的横纵坐标,在你遍历的时候,在页面上写好img元素里面写好onclick的js方法,把该信息放进textbox里面,就OK了,别忘了修改页面的ValidateRequest="false",否则会报错
你可以这样做。
1、利用你的div,给它添加runat="server"属性,然后让这个div的id都唯一,这个应该不难做大吧。
<div id='div<%= i %>'>类似这样
2、你不是会有OnItemCommand事件么,在这个事件里就可以找到这个div。我写下伪代码:
protected void repeater_OnItemCommand(object sender, e){
div = eControls[0] as HtmlControl;
textbox = eControls[1] as TextBox;
if(div != null)
divAttributesAdd("data", textboxClientID);
}
3、在你的客户端,用js获取div的data属性,就可以获取到textbox在客户端的id了
以上就是关于asp.net 动态添加控件 每点击“添加按钮” 页面创建一个Textbox(后台可以访问到值的)。全部的内容,包括:asp.net 动态添加控件 每点击“添加按钮” 页面创建一个Textbox(后台可以访问到值的)。、经过js修改后如何重新获得Repeater数据、C# repeater 后台动态添加imagebutton 带click事件 用于点击头像为textbox赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)