| 用户控件(。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 得注意已经加载.
|
|
 |
推荐文章 |
|