ascx用户控件参数传递问题 怎样把一个绑定数据<%#Eval("value")%>的值传到ascx控件去,需要动态更新的那种,大神们帮忙看看有什么办法没? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为你的 ascx 定义属性啊。 ascx中定义属性就好了。 我举个例子吧:数据库表中有一列值为一串字符串,是由多个数据拼接而成,在aspx页绑定数据时,使用一个ascx控件来绑定这个字符串拆分出来的数据,而这个数据也得从绑定数据时才能会有,就是这个值咋样才能每次刷新时更新传值不至于报空 aspx:<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="100%"> <ItemStyle Width="260px" /> <ItemTemplate> <table style="text-align: left" class="tableCss"> <tr> <td>题目:<%#DataBinder.Eval(Container.DataItem,"Question")%></td> </tr> <tr> <td>答案:<AN:Answers runat="server" ID="re" Answer='<%#DataBinder.Eval(Container.DataItem,"Answer")%>'/></td> //这个答案就是所有答案拼接的字符串数据 </tr> </table> </ItemTemplate> </asp:DataList>如上形式,Answer这个属性的绑定数据只有第一次加载才有值,在Answers.ascx中需要对此属性的值进行拆分绑定数据到ascx中的控件上,然后aspx这边引用Answers.ascx这个控件显示的,就是这个值没能即时更新 aspx:<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="100%"> <ItemStyle Width="260px" /> <ItemTemplate> <table style="text-align: left" class="tableCss"> <tr> <td>题目:<%#DataBinder.Eval(Container.DataItem,"Question")%></td> </tr> <tr> <td>答案:<AN:Answers runat="server" ID="re" Answer='<%#DataBinder.Eval(Container.DataItem,"Answer")%>'/></td> //这个答案就是所有答案拼接的字符串数据 </tr> </table> </ItemTemplate> </asp:DataList>如上形式,Answer这个属性的绑定数据只有第一次加载才有值,在Answers.ascx中需要对此属性的值进行拆分绑定数据到ascx中的控件上,然后aspx这边引用Answers.ascx这个控件显示的,就是这个值没能即时更新 参考:http://www.cnblogs.com/insus/p/3154363.htmlhttp://www.cnblogs.com/insus/archive/2011/05/28/2060661.htmlhttp://www.cnblogs.com/insus/archive/2013/03/08/2950300.html 具体问题你还是具体分析。web 是无状态的,而 asp.net 之所以有状态,就是因为基于 ViewState 这个机制。那么你的属性值在页面(随便放一个简单的 Button 按钮进行页面回发)刷新时丢掉了,就要先看看自己有没有 ViewState 持久化,而不要先去看别人有没有给自己传值。举个例子,一个 string 类型的属性,可能是这样的编程结果:public string Name{ get { var nm = ViewState["name"]; return (string)nm ?? "无名氏"; } set { if (Name != value) { ViewState["name"] = value; EnsureChildControls(); this.Label1.Text.DataBind(); } }} 我会把重点始终放在主要的测试要点上,我再次给你强调一下“测试自己会不会asp.net 编程设计”的一个基本的测试:在你的 aspx 上随便拖入一个 Button 控件,双击它产生后台处理事件代码,这个事件处理方法内部空着即可。然后你在开发中随时调试时就时不时地点击这个按钮。你会发现界面上任何可见的东西都不会丢,也不会乱!由于这个按钮什么都不做,那么你点击按钮引起页面回发时,你的 DataList1 绝不会去重新读取数据库、重新绑定(这是多么举得性能代价啊,这将会使你的 asp.net 页面变得异常缓慢),其中的所有的 re 用户控件实例也绝不会去重新获取什么 Answer 值。asp.net 知道如何会自动重建控件,因为有了全套 ViewState 机制,所以 asp.net 在 DataList1 的ViewState 中递归地保存了所有足以重建控件形态的数据。如果你发现某个数据需要重新读取数据库、需要重新执行你的赋值代码,那么这就是 asp.net 编程的“外道”了。有些人编写的“示范”代码就会经不起这个简单的 Button 测试,它甚至告诉你在页面刷新时需要整体去重新读取数据库、重新绑定所有控件值、重新给所有的控件传值赋值,这就是错误的“示范”。如果你发现经不起这个简单的 button 测试,应该意识到自己没有学会 asp.net 自身的控件开发和使用原理。而不要从比较简单偷懒的“重新绑定数据”方向去设计你的程序。 上面的 demo 代码我改一下public string Name{ get { EnsureChildControls(); var nm = ViewState["name"]; return (string)nm ?? "无名氏"; } set { EnsureChildControls(); if (Name != value) { ViewState["name"] = value; pName.DataBind(); } }}其中,在 ascx 中需要写 EnsureChildControls() 这是一个知识点,需要使用 ViewState 这是第二个知识点。 谁手里有dllforvc.dll文件 获得自定义标签的属性值 查询返回结果集,除了dataset还有什么类型 奇怪的"未将对象引用设置对象的实例"错误 Response.Redirect ("?")传值问题 datagrid 显示问题 OLEDBCONNECTION出现异常,找不到可安装的ISAM,这是怎么一回事? 问题!!! 没有方法运行?怎么设置? .net动态调用webservice时,如果参数为实体怎么办? .aspx.cs中列表改变时,前台aspx不刷新,怎么更新前台数据 jcd文件的mime类型是多少?
数据库表中有一列值为一串字符串,是由多个数据拼接而成,在aspx页绑定数据时,使用一个ascx控件来绑定这个字符串拆分出来的数据,而这个数据也得从绑定数据时才能会有,就是这个值咋样才能每次刷新时更新传值不至于报空
<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="100%">
<ItemStyle Width="260px" />
<ItemTemplate>
<table style="text-align: left" class="tableCss">
<tr>
<td>题目:<%#DataBinder.Eval(Container.DataItem,"Question")%></td>
</tr>
<tr>
<td>答案:<AN:Answers runat="server" ID="re" Answer='<%#DataBinder.Eval(Container.DataItem,"Answer")%>'/></td> //这个答案就是所有答案拼接的字符串数据
</tr>
</table>
</ItemTemplate>
</asp:DataList>如上形式,Answer这个属性的绑定数据只有第一次加载才有值,在Answers.ascx中需要对此属性的值进行拆分绑定数据到ascx中的控件上,然后aspx这边引用Answers.ascx这个控件显示的,就是这个值没能即时更新
<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal" RepeatColumns="3" Width="100%">
<ItemStyle Width="260px" />
<ItemTemplate>
<table style="text-align: left" class="tableCss">
<tr>
<td>题目:<%#DataBinder.Eval(Container.DataItem,"Question")%></td>
</tr>
<tr>
<td>答案:<AN:Answers runat="server" ID="re" Answer='<%#DataBinder.Eval(Container.DataItem,"Answer")%>'/></td> //这个答案就是所有答案拼接的字符串数据
</tr>
</table>
</ItemTemplate>
</asp:DataList>如上形式,Answer这个属性的绑定数据只有第一次加载才有值,在Answers.ascx中需要对此属性的值进行拆分绑定数据到ascx中的控件上,然后aspx这边引用Answers.ascx这个控件显示的,就是这个值没能即时更新
http://www.cnblogs.com/insus/p/3154363.html
http://www.cnblogs.com/insus/archive/2011/05/28/2060661.html
http://www.cnblogs.com/insus/archive/2013/03/08/2950300.html
具体问题你还是具体分析。web 是无状态的,而 asp.net 之所以有状态,就是因为基于 ViewState 这个机制。那么你的属性值在页面(随便放一个简单的 Button 按钮进行页面回发)刷新时丢掉了,就要先看看自己有没有 ViewState 持久化,而不要先去看别人有没有给自己传值。举个例子,一个 string 类型的属性,可能是这样的编程结果:public string Name
{
get
{
var nm = ViewState["name"];
return (string)nm ?? "无名氏";
}
set
{
if (Name != value)
{
ViewState["name"] = value;
EnsureChildControls();
this.Label1.Text.DataBind();
}
}
}
{
get
{
EnsureChildControls();
var nm = ViewState["name"];
return (string)nm ?? "无名氏";
}
set
{
EnsureChildControls();
if (Name != value)
{
ViewState["name"] = value;
pName.DataBind();
}
}
}其中,在 ascx 中需要写 EnsureChildControls() 这是一个知识点,需要使用 ViewState 这是第二个知识点。