asp.net 动态添加控件 每点击“添加按钮” 页面创建一个Textbox(后台可以访问到值的)。

asp.net 动态添加控件 每点击“添加按钮” 页面创建一个Textbox(后台可以访问到值的)。,第1张

我简单看了下 实际上的一个主要问题就是动态控件状态在回传后的保存问题 即你动态创建了一个控件 在回传后却发现控件不见了或者被新的覆盖了!

要解决这个问题很简单 只要保存控件的视图状态就可以了 我们可以用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赋值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9594094.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存