aspx页面中向用户控件传值

潮起潮落 2011-05-21 12:03:37
目前的需求是,在主页面的page_load事件里面通过操作数据库获得了一些数据,要把这些获得的数据传给用户控件。
写用户控件引用的时候赋值属性,只允许是静态值,不能是变量。
那么在代码中实现怎么实现呢?

我简化了一下,写了个test项目,实现不了。

用户控件uc_page.ascx


public string str="";
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write(str);//在这里希望得到得到aspx页面传来的值
}


aspx页面 main.aspx前端

<%@ Register TagPrefix="uc" TagName="pages" src="uc_pages.ascx" %>
<%@ Page language="c#" Codebehind="main.aspx.cs" AutoEventWireup="false" Inherits="uctest.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
</HEAD>
<body>
<uc:pages runat="server" id="Pages1" />
</body>
</HTML>


aspx页面 main.aspx.cs

System.Web.UI.UserControl pages;
private void Page_Load(object sender, System.EventArgs e)
{
string newstr="hello world";
pages.str=newstr;
}


这么做实现不了。哪位帮忙看看。
...全文
227 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
潮起潮落 2011-05-21
  • 打赏
  • 举报
回复
结贴了。是自己以前对.net的模式理解有偏差。
用的是在aspx页面给用户控件赋值,因为这个是要被很多页引用的,如果在用户控件中引用aspx里面的属性,每次还得给this.Page强制转换为一个“用到这个用户控件的aspx页”的类型。
还是从外往里方便一些。
其实主帖里面写的东西。
大概一看就错的离谱,可惜没人给俺指出。
jianshao810 2011-05-21
  • 打赏
  • 举报
回复
给用户控件对应的类添加属性,aspx页面给用户控件的这个属性赋值即可。
潮起潮落 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sui2012 的回复:]

直接在用户自定义控件页就可以通过数据库操作获取数据啊
不知道回答是否符合你问题的意思...
[/Quote]
不符合。
分页应用的地方很多。
有评论列表,也有文章列表。还有后台管理的一些列表。
我用的方法是在读取列表的时候返回一个pagecount,就是共有多少页。然后根据这个变量加上当前页page、除page参数外连接的url来拼接出的分页按钮列表。
用户控件页是可以通过数据库操作读取数据,不过那岂不是要重复读两遍。
潮起潮落 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jomph 的回复:]

用session吧
[/Quote]
这是一个分页用的用户控件。
如果用session。就变成用户连接级别存储的。
可以是可以的,不过如果多页面同时进行不知道是不是会有问题,估计几率很小。
不过我觉得是可以在aspx页面page_load里,用户控件加载之前给用户控件公用属性赋值的。就是不知道怎么弄。
潮起潮落 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dalmeeme 的回复:]

给用户控件对应的类添加属性,aspx页面给用户控件的这个属性赋值即可。
[/Quote]
我在ascx页面
添加public string str="";不就是给用户控件对应的类添加属性了吗。
aspx页面给用户控件的这个属性赋值即可。

一下在aspx页面的操作不是给这个属性赋值吗?是否操作上有偏差?

System.Web.UI.UserControl Pages1;
public string newstr;
private void Page_Load(object sender, System.EventArgs e)
{
newstr="hello world";
Pages1.str=newstr;
}

cyx1215 2011-05-21
  • 打赏
  • 举报
回复
用session或是cookie不行么?
潮起潮落 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yangquanlaohou 的回复:]

public string str=""
封装成 属性。试试
[/Quote]
<uc:pages runat="server" id="Pages1" />
改为
<uc:pages runat="server" id="Pages1" str="" />

然后在aspx页面里

System.Web.UI.UserControl Pages1;
public string newstr;
private void Page_Load(object sender, System.EventArgs e)
{
newstr="hello world";
Pages1.str=newstr;
}

调试显示““System.Web.UI.UserControl”并不包含对“str”的定义”
sui2012 2011-05-21
  • 打赏
  • 举报
回复
直接在用户自定义控件页就可以通过数据库操作获取数据啊
不知道回答是否符合你问题的意思...
dalmeeme 2011-05-21
  • 打赏
  • 举报
回复
另外,用户控件是可以引用aspx页面里的公共成员的,用WebUserControl1.Page获得用户控件所在的aspx页面类,然后就可以访问了。
jomph 2011-05-21
  • 打赏
  • 举报
回复
用session吧
dalmeeme 2011-05-21
  • 打赏
  • 举报
回复
给用户控件对应的类添加属性,aspx页面给用户控件的这个属性赋值即可。
yangquanlaohou 2011-05-21
  • 打赏
  • 举报
回复
public string str=""
封装成 属性。试试
dalmeeme 2011-05-21
  • 打赏
  • 举报
回复
没关系,给我的够多了,60分啊。哈哈~~
潮起潮落 2011-05-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 dalmeeme 的回复:]

aspx里定义一个公共字段,比如叫public string s="你好";
在用户控件里用Response.Write(this.Page.GetType().GetField("s").GetValue(this.Page));
即可获取,利用反射实现。
[/Quote]
嗯。这样两样都可以了。
不过已经结贴了,没法再给分了。
谢谢你啊。
dalmeeme 2011-05-21
  • 打赏
  • 举报
回复
aspx里定义一个公共字段,比如叫public string s="你好";
在用户控件里用Response.Write(this.Page.GetType().GetField("s").GetValue(this.Page));
即可获取,利用反射实现。

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧