我把一个用户控件放在一个DATALIST里面,现在要对用户控件动态传值,应该怎么做?请大家指点 我把一个用户控件放在一个DATALIST里面,现在要对用户控件动态传值,应该怎么做?请大家指点!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没人?!哦,那自己回答了。Form:WebForm1.aspx<%@ Register TagPrefix="tagPrefix1" TagName="tagName1" Src="WebUserControl1.ascx"%> ...<asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server"> <ItemTemplate> <tagPrefix1:tagName1 id="pp1" runat="server" u_tmp=<%# DataBinder.Eval(Container.DataItem,"rowID")%>></tagPrefix1:tagName1> </ItemTemplate></asp:DataList>...//这里的DATALIST绑定了一个DATASET对象WebUserControl1.ascx.cs... public string u_tmp;... private void Page_Load(object sender, System.EventArgs e) { this.Label1.Text=this.u_tmp; }...昨天这样值传不过去,但是今天写成这个样子又可以传了,原因还没有找出来。 貌似跟优先级有关不用Page_Load改成自定义方法应该就没问题了。当然调用的时候也需要改一下方式private string _utmppublic string U_Tmp{get{return _utmp;}set{_utmp=value;}}public string bind(){ this.Label1.Text=U_Tmp;} 顺序应该是页面 Page_Lode,控件Page_Load,楼上说的ms有道理. http://community.csdn.net/Expert/TopicView.asp?id=5030009 对于行,先执行page_load,后执行databind()。 一种只看眼前的解决方法是:可以给你的用户控件定义: pulic void RefreshParams() { this.Label1.Text=this.u_tmp; }然后你在DataList的 itemDataBound 中执行这个用户控件的RefreshParams()方法。控件按说应该在 CreateChildControls中设置子控件,不应该在page_load中处理。这时候,用户控件应该这样定义: private string _u_tmp; public string u_tmp; { get{ return _u_tmp; } set{ this.ChildControlsCreated=false; _u_tmp=value;} } protected void CreateChildControls() { base.CreateChildControls(); this.Label1.Text=this.u_tmp; }只有到OnPrerender的时候才给 this.Label1.Text 传值,那么早给具体控件赋值是不对的,当数据有多条赋值/更新语句的时候,会引起控件反复被刷新。 对,我传值后,又把页面刷新了,if(!this.IsPostBack)就好了。谢谢大家。 创建控件时出错 这种表用SQl怎么做呀? 求助IIS7 asp.net 下自定义错误页的问题 现在学ASP.NET还是停留在拖控件或者是用别人的框架来做东西···怎么办啊 如何给table定位? jquery 问题 急用 请教大家关于gridview的问题 如何在cs文件中运行js代码? 遍历Checkboxlist(非数据库绑定值)的BUG问题! C#使用mysql-connector-net-6.6.5连接mysql的问题 思考良久的一个问题,请大虾来点意见! 动态网页的url问题!急!需要大家帮忙!
...
<asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server">
<ItemTemplate>
<tagPrefix1:tagName1 id="pp1" runat="server" u_tmp=<%# DataBinder.Eval(Container.DataItem,"rowID")%>></tagPrefix1:tagName1>
</ItemTemplate>
</asp:DataList>
...
//这里的DATALIST绑定了一个DATASET对象
WebUserControl1.ascx.cs...
public string u_tmp;
...
private void Page_Load(object sender, System.EventArgs e)
{
this.Label1.Text=this.u_tmp;
}
...昨天这样值传不过去,但是今天写成这个样子又可以传了,原因还没有找出来。
不用Page_Load改成自定义方法应该就没问题了。当然调用的时候也需要改一下方式private string _utmp
public string U_Tmp
{
get{return _utmp;}
set{_utmp=value;}
}
public string bind()
{
this.Label1.Text=U_Tmp;
}
页面 Page_Lode,控件Page_Load,楼上说的ms有道理.
pulic void RefreshParams()
{
this.Label1.Text=this.u_tmp;
}然后你在DataList的 itemDataBound 中执行这个用户控件的RefreshParams()方法。
控件按说应该在 CreateChildControls中设置子控件,不应该在page_load中处理。这时候,用户控件应该这样定义: private string _u_tmp; public string u_tmp;
{
get{ return _u_tmp; }
set{ this.ChildControlsCreated=false; _u_tmp=value;}
} protected void CreateChildControls()
{
base.CreateChildControls();
this.Label1.Text=this.u_tmp;
}只有到OnPrerender的时候才给 this.Label1.Text 传值,那么早给具体控件赋值是不对的,当数据有多条赋值/更新语句的时候,会引起控件反复被刷新。
if(!this.IsPostBack)就好了。
谢谢大家。