急,,,,怎样给用户控件里的自定义属性赋值??
在一个ASPX页中调用了一个用户控件ASCX,,用户控件中定义了三个字符串的属性,代码如下:public partial class webs_reply : System.Web.UI.UserControl
{
private string _kk;
private string _vv;
private string _tname;
public string kk
{
set
{
_kk = value;
}
get
{
return _kk;
}
}
public string vv
{
set
{
_vv = value;
}
get
{
return _vv;
}
}
public string tname
{
set
{
_tname = value;
}
get
{
return _tname;
}
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("select uname,uptime,content from " + tname + " where " + kk + "=" + vv + " order by uptime desc");
Response.End();
}
}
在ASPX。CS页中这样给它们赋值:
public partial class webs_show_es : System.Web.UI.Page
{
protected webs_reply c1 = new webs_reply();
protected void Page_Load(object sender, EventArgs e)
{
c1.kk = "sid";
c1.vv = sid;
c1.tname = "rhb_es_reply";
}
}
可是运行后显示出来的这三个值都是空的,,不知道为什么。。。。。 --------------------编程问答-------------------- 用户控件的Page_Load比它所在窗体的Page_Load先运行
就是这样 --------------------编程问答-------------------- Response.Write("select uname,uptime,content from " + tname + " where " + kk + "=" + vv + " order by uptime desc");
Response.End();
你可以把这几句话搬到PreRender()里
--------------------编程问答-------------------- 对了,,我用的是VS2005 --------------------编程问答-------------------- 晕了,,
protected void Page_PreRender(object sender, EventArgs e)
{
Response.Write("select uname,uptime,content from " + tname + " where " + kk + "=" + vv + " order by uptime desc");
Response.End();
}
放到这里还是取不到值。。。。。 --------------------编程问答-------------------- 代码已经全贴出来了,,大佬们帮帮我啊。。。。。。。。。。 --------------------编程问答-------------------- 直接在html里,引用此控件处写
<uc1:WebUserControl ID="WebUserControl1" runat="server" _kk="aa" _vv="bb" />
就好了 --------------------编程问答-------------------- public string tname
{
set
{
_tname = value;----改成value=_tname就可以了
}
get
{
return _tname;
}
} --------------------编程问答-------------------- protected webs_reply c1 = new webs_reply();
错误!
不要赋值
声明一下protected webs_reply c1;
即可 --------------------编程问答-------------------- 还要确保
窗体的html代码里webs_reply控件的id="c1" --------------------编程问答-------------------- 在引用用户控件的页面 手动声明该控件
protected 命名空间.命名空间.类名 用户控件的id值;
不用new就可以了 --------------------编程问答-------------------- 你的代码有几个问题:
1. "protected webs_reply c1 = new webs_reply();"这个写的真的没道理!webs_reply只是用户控件的父类(你看你的ascx的生命上写着inherit呢吧),而不是用户控件本身。
2. 用户控件要动态产生就应该用页面的LoadControl方法装入。例如:
webs_reply uc=(webs_reply)this.LoadControl("webs_reply.ascx");
uc.kk="aa";
3. 控件只有装入页面控件树,才可能真正找得到正确的Response对象。
4. 一般来说你在动态装载的控件的load事件中处理业务逻辑会得到错误的结果。不过你这个例子恰好流程异常简单,即使写错了地方,结果也不会出错。就好像有些去上厕所如果走错了门,只要后边根本没有人进来,你也不会感到有什么不方便。当你的程序要处理状态、处理post值、业务处理等的时候,就会发现必须把业务逻辑代码放到准确的事件上。 --------------------编程问答-------------------- 我顶楼上的 --------------------编程问答-------------------- 谢谢SP1234,,你的意思是我的代码没有写到正确的事件里吗??是用户控件里还是调用页里不对??
以上的方法我都试了,除了这个: _tname = value;----改成value=_tname就可以了
真的没有办法了,,恳请大侠们再帮我一把,,究竟错在哪了,,有人能帮我写一个对的出来吗》》
--------------------编程问答-------------------- 先将用户控件webs_reply对其自身成员的输出移动到PreRender内,然后——
如果:
1-------------------------------------------------
窗体的html代码中包含了用户控件webs_reply的引用,则:
*在窗体的后台代码类定义中加入声明:protected webs_reply c1;
*在Page_Load中按原样访问
2-------------------------------------------------
窗体的html代码中并不包含了用户控件webs_reply的引用,而是在窗体的后台代码中手动添加此控件,则:
*在窗体的后台代码类定义中加入声明:protected webs_reply c1;
*在窗体的Page_Load中为c1的属性赋值之前创建其对象:c1 = new webs_reply();
*在赋值后,添加代码:this.Control.Add(c1); --------------------编程问答-------------------- 谢谢SP1234,,你的意思是我的代码没有写到正确的事件里吗??是用户控件里还是调用页里不对??
——————————————————————————————————————————
我前三条是针对的你的逻辑错误,你的程序表现就错了。如果你前三天改好,后一条恰好不用改。你的代码:
protected webs_reply c1 = new webs_reply();
protected void Page_Load(object sender, EventArgs e)
{
c1.kk = "sid";
c1.vv = sid;
c1.tname = "rhb_es_reply";
}
}
看上去你并没有研究页面的load如何会调用c1控件的load的。 --------------------编程问答-------------------- xujunsweet() 正解
SP1234分析的比较透彻
都是牛人呀 --------------------编程问答-------------------- 用户 xujunsweet()
直接在html里,引用此控件处写
<uc1:WebUserControl ID="WebUserControl1" runat="server" _kk="aa" _vv="bb" />
就好了
是错误的
正确应该如下:
直接在html里,引用此控件处写
<uc1:WebUserControl ID="WebUserControl1" kk='aa' ,vv='bb',tname='name' runat="server" />
就好了
在ASPX。CS页中需要给它们赋值了 --------------------编程问答-------------------- 更正
在ASPX。CS页中不需要给它们赋值了
--------------------编程问答-------------------- 你在实例化那个自定义控件时 打ASP.看看能不能看到那个自定义控件名称
如果没有 在html中写<register >之类的东西 再运行一下 估计就可以了
我做了6。7个自定义控件都好用的
可惜我的代码没在这 要不我给你发些 --------------------编程问答-------------------- public string kk
{
set
{
ViewState["kk"] = value;
}
get
{
return ViewState["kk"].ToString();
}
}
--------------------编程问答-------------------- 另:就象楼上说的,动态创建你必须把控件加入控件树中才能有显示 --------------------编程问答-------------------- 只要你有钱,生活就多姿多彩,并且每人问你钱是怎么来的
日本松下有一位高官说过:即使我们不去拜靖国神社韩国人也不会买我们的产品,但不管我们再怎样的去拜靖国神社,中国人照样会买我们的产品。----- 一句让中国人从头凉到脚的话。 每直接或间接地购买100元日本货,你就: 1.为日本厂家增加40元的毛利收入 2.为日本企业增加了20元的扩张资本 3.为日本政府增加了5元的税收收入 4.给日本的所谓自慰队增加了 10颗子弹 5.多印6~8页的篡改历史的教科书和文件 6.送给小犬蠢一狼参拜鬼社的汽油费 **。如果你买日本汽车,将来开上中国街头的日本坦克就是你造的!! **。如果你买日本橱具,将来射穿你儿子头颅的子弹就是你造的!! **。如果你买日本电视音响,将来就会在战地喇叭中听到中国人被杀的哀鸣!!!我们没有时间和权力去采取政治行动,我们只能作力所能及的事,拒买日货是我们对付日本人的最好行动,不但简单而且有效.我每天上网必做的一件事就是把此这篇文章贴到可能的地方,只要上网,我至少要贴上10次!!!作为一个有良知的中国人,来和我和许多爱国人士一起并肩战斗吧!! 请把此文贴到一切可能的地方,你一定会为你的所作所为而自豪 --------------------编程问答-------------------- 在html最上面添加:
<%@ Register TagPrefix="Tag" TagName="Title" Src="webs_reply.ascx" %>
在Form中引用:
<form id="Form1" method="post" runat="server">
<Tag:Title id="m_TitleControl" runat="server"/>]
然后在画面初期化时,对属性赋值
m_TitleControl.KK = value
......
(m_TitleControl要先声明)
--------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答--------------------
webs_reply c1 = (webs_reply)this.FindControl("MyControl1");
c1.kk = "sid ";
c1.vv = "sid";
c1.tname = "rhb_es_reply "; --------------------编程问答-------------------- 觉得主要问题是 protected webs_reply c1 = new webs_reply(); 这个是完全没有必要的。
补充:.NET技术 , ASP.NET