最近发现数据控件(我这里用Repeater)如果通过手工绑定一个数据源的话,如果回发时又一次绑定数据的话该数据控件里的服务器控件将不能保存其控件状态,大致代码如下:(Repeater控件内的TextBox1(TextBox1并没有绑定数据,只是在Repeater控件内),用Label1来获取回发后TextBox1的值)
protected void Page_Load(object sender,EventArgs e)
{
......这里省略了获取数据的代码
Repeater1.DataSource=...;
Repeater1.DataBind();
}
protected void Button1_Click(object sender,EventArgs e)
{
string str="";
foreach(RepeaterItem item in Repeater1.Items)
{
str+=((TextBox)item.FindControl("TextBox1")).Text; //获取回发后TextBox1的值
}
Label1.text=str;
}
得到的结果很明确,就是Repeater1控件内的TextBox1在网页回发后,如果Repeater1在回发时绑定的话,TextBox1将不能保持其在回发前输入的值,如果Repeater1在回发时不绑定的话,则TextBox1将能保持其在回发前输入的值,即改成如下代码:
protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
......这里省略了获取数据的代码
Repeater1.DataSource=...;
Repeater1.DataBind();
}
}
protected void Button1_Click(object sender,EventArgs e)
{
string str="";
foreach(RepeaterItem item in Repeater1.Items)
{
str+=((TextBox)item.FindControl("TextBox1")).Text; //获取回发后TextBox1的值
}
Label1.text=str;
}
如果改成数据源控件提供数据的话,则TextBox1将能保持其在回发前输入的值,也就是和第2种情况一样。
问题:
第1种情况下的TextBox1并没有绑定数据,为什么在Repeater1在回发时绑定数据后不能保存其自身的状态(即不能保持其在回发前输入的值)?
数据源控件提供数据的情况下是在页面生命周期的哪个阶段为数据源控件提供数据的? 为什么这种情况下TextBox1将能保持其在回发前输入的值? 难道默认情况下在回发时数据源控件将不为数据控件提供数据?
protected void Page_Load(object sender,EventArgs e)
{
......这里省略了获取数据的代码
Repeater1.DataSource=...;
Repeater1.DataBind();
}
protected void Button1_Click(object sender,EventArgs e)
{
string str="";
foreach(RepeaterItem item in Repeater1.Items)
{
str+=((TextBox)item.FindControl("TextBox1")).Text; //获取回发后TextBox1的值
}
Label1.text=str;
}
得到的结果很明确,就是Repeater1控件内的TextBox1在网页回发后,如果Repeater1在回发时绑定的话,TextBox1将不能保持其在回发前输入的值,如果Repeater1在回发时不绑定的话,则TextBox1将能保持其在回发前输入的值,即改成如下代码:
protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
......这里省略了获取数据的代码
Repeater1.DataSource=...;
Repeater1.DataBind();
}
}
protected void Button1_Click(object sender,EventArgs e)
{
string str="";
foreach(RepeaterItem item in Repeater1.Items)
{
str+=((TextBox)item.FindControl("TextBox1")).Text; //获取回发后TextBox1的值
}
Label1.text=str;
}
如果改成数据源控件提供数据的话,则TextBox1将能保持其在回发前输入的值,也就是和第2种情况一样。
问题:
第1种情况下的TextBox1并没有绑定数据,为什么在Repeater1在回发时绑定数据后不能保存其自身的状态(即不能保持其在回发前输入的值)?
数据源控件提供数据的情况下是在页面生命周期的哪个阶段为数据源控件提供数据的? 为什么这种情况下TextBox1将能保持其在回发前输入的值? 难道默认情况下在回发时数据源控件将不为数据控件提供数据?
解决方案 »
- 如何更改数据库排充规则?说白了就是中文数据库要导到英文数据库
- Asp.net ScriptX 插件打印问题
- 用高级控件的是SB,用低级控件的是NB
- 值对于 Int32 太大或太小
- 点击GridView中的某一行中的Button按钮能否知道该按钮是在哪一行吗?
- 在一个页面中用window.open()打开一新页后在新页中做了一些操作后,关闭新页后怎么通知母页的更改?
- Treeviwe值是绑定的数据源,当点击TreeView叶子节点时,怎么获取这个节点的值,并把这个值赋给一个TextBox,请问怎么实现?急,谢谢
- 为什么在调试时网站启动突然变慢?
- 挑战高手的难题: 如何修改FILE控件的"浏览"标题? 现在已可以改过来了, 但是服务端又接收不到上传文件? 谁能解决高分相送. 谢谢!!!
- 大家看看这样的功能能不能实现?怎样实现?(老板天天催我,我快死了)
- 创建属性快捷键
- 要怎么从管理员网页上给上千的客户发送EMAIL?有什么好的解决方案?
<ItemTemplate>
<asp:TextBox ID='TextBox1' Text="这里没有绑定字段"></TextBox>
</ItemTemplate>
</Repeater>
不是动态生成的,但每次绑定,也会失去值。
<Repeater>
<ItemTemplate>
<asp:Label...确实Label要绑定一个字段才能有TextBox,所以TextBox是动态生成的..
<asp:TextBox ID='TextBox1' Text="这里没有绑定字段"></TextBox>
</ItemTemplate>
</Repeater>
但为何用数据源控件为Repeater1提供数据时,TextBox会保留原值?
<Repeater DataSourceID="数据源控件的ID">
<ItemTemplate>
<asp:Label...确实Label要绑定一个字段才能有TextBox,所以TextBox是动态生成的..
<asp:TextBox ID='TextBox1' Text="这里没有绑定字段"></TextBox>
</ItemTemplate>
</Repeater>