WEB 开发 开发语言 Java 技术 .Net 技术 数 据 库 硬件使用
图象媒体 Linux/Unix 移动平台 嵌入开发 Windows 专区 软件工程
Ajax 技术 | ASP | PHP | ASP.NET | C# | JSP | Access | Oracle | 网页设计 | Flash | 安全专题 | IIS | VC/MFC | Delphi | C/C++
 你的位置:首页 > .Net 技术 > ASP.NET

用户控件(。ascx)与网页间(。aspx)如何传值?
[ 来源:ITWENKU 时间:2006-12-1 9:43:39 | 浏览:303人次 ]

碰到一问题?网页向用户控件传值简单.不知如何才能由.ascx向.aspx传值


在.aspx文件里面定义一个public的全局变量,然后.ascx里面就可以使用它啦


最好是在控件里增加一个public的属性访问
public string LabelText
{
get{return this.Label1.Text;}
}

如果你现在不能改写控件了,那么用FindControl也可以:
Label lbl = (Label)WebUserControl1.FindControl("Label1");
string a = lbl.Text;
具体参考我发的帖子,上面是别人回答的部分,这两个方法都可以。


谢了


采用属性是比较好的方法


哦,我发的帖子地址忘记贴上来。补上。
http://community.csdn.net/Expert/TopicView.asp?id=4922453


如果你现在不能改写控件了,那么用FindControl也可以:
Label lbl = (Label)WebUserControl1.FindControl("Label1");
string a = lbl.Text;
具体参考我发的帖子,上面是别人回答的部分,这两个方法都可以。
------------------------------------
我也这样写,LZ参考


以上两个方法我使用了,.NET都报未将对象引用到实例中.不知是为啥?
能否给一个完整而且正确的方法呢?'0'


上面的方法肯定可以,你自己出问题了。


你应该先用<%@ Register TagPrefix="……" TagName="……" src="……">注册一下,然后再用所注册的名字生成一个标记才能用。
例如:
<%@ Register TagPrefix="DataAcc" TagName="DataOp" src="../inc/inc.ascx" %>
<DataAcc:DataOp ID="dbfun" runat="server" />



mark


ascx向aspx传值的确会比较麻烦, 因为不知道aspx页面具体的type是什么, 我的办法是采用反射.曾经做过这么一个程序, 在ascx中检查aspx是否有一个特定名称的方法, 如果有则调用, 没有就不管了. 这种方式和你要的属性赋值原理应该差不多, 但一时找不到源代码了, 只能提供一个思路, 楼主自己想办法吧.


aspx文件:
public void SetLabel(string str)
{
this.Label1.Text = str; ;
}
ascx文件;
protected void Button1_Click(object sender, EventArgs e)
{
System.Web.UI.Page p = this.Page;
Type pageType = p.GetType();
MethodInfo mi = pageType.GetMethod("SetLabel");
mi.Invoke(p, new object[] { "你这个大猪猪!" });

}


在用户控件中加一个属性
在页面上加如下代码
userControl uc = (userControl)this.FindControl("定义的用户控件id");
然后用"uc.属性值"取得用户控件数据


mark


mark



作个标记


我也作个记号


学习


控件使用事件通知外部程序,眼前的所有控件都采用的方法要学,不用做给分聪明的设计。


给分聪明的设计 --> 过分聪明的设计

意思是说事件是经过检验、比较恰当的设计方法。既不像当然地要求外部有什么样的接口(可以想象一下如果TextBox等控件分别要求一个接口,那么我们写任何程序都要先实现好几百的接口代码,还没有写干实事的程序就累死了),也不像反射那样降低上千倍效率和丧失编译器的类型检查功能。


在aspx里的page_load里没法取到ascx控件里的控件的值(比如:txt.text).
在其他过程里最好通过ascx的属性来取值:
比如ascx有个属性:
public readonly property quzhi() as string
get
return txt.text
end get
end property
在aspx页的代码里就可以用ascx1.quzhi来取的txt.text的值,比如:
dim str as string=ascx1.quzhi

也可以通过ascx里的函数来取值:
比如ascx有个函数:
public function quzhi2() as string
dim str as string
............
return str
end function
在aspx里用:dim theStr as string=ascx1.quzhi2()

ascx里的属性或者函数一定要是public

如果你用的是vs2003,你还要在aspx.vb(cs)里声明(代码分离才要):
protected 控件名称 as 控件id


取值不是问题,关键是通知页面去取值。


为控件编写属性较好. 当多处引用该控件时, 较为方便.

ascx.cs
public type Pxxx
{
get {return ...;}
set {...=value;}
}
其中可以用
ViewStatus["...."]来暂存,
也可用 Session 来存,
用 Control 得注意已经加载.


 相关文章
·关于vs2005自带水晶报表的问题
·IE7 中文正式版下的一些问题
·asp。net2。0:先客户端验证,再服务器端执行的简单问题
·ASPNET2。0数据提供者的问题
·第一次写控件出现的问题?
·关于上传路径的问题

 推荐文章
TextBox中的文本怎么分行显示??
一个小算法问题
关于图片url的问题
关于实现动态菜单的一个问题
动态改变论坛风格是怎么做到的?
这样的搜索结果该如何用什么控件绑定?
如何解决excel把01234567自动显示为1234567的情况啊
关于引用appSettings的问题
CuteEditor存入Access数据库的问题。急急
asp。net 2。0运行数据库错误
url传值,丢值的问题?
服务器问题
 版权所有:IT问库
copyright © 2006 www.itwenku.cn all rights reserved.