用户控件WebUserControl1.ascx
调用页面:test.aspx
想实现:把test.aspx中的一个string的值传给WebUserControl1.ascx,WebUserControl1.ascx上用一个label把这个值显示出来
WebUserControl1.ascx中定义属性:
private string _test;
public string test
{
get
{
return _test;
}
set
{
_test = value;
}
}
WebUserControl1.ascx中加一个button,onclick事件下写
private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text = this.test;
}
test.aspx下
private void Page_Load(object sender, System.EventArgs e)
{
WebUserControl1 uc = new WebUserControl1();
uc.test = "test";
}
这种情况下点击button,Label1并没有取道test页面传过来的值,但是设断点跟踪_test = value一句是取到值了的。这是通过test页面后台代码传递参数的情况,用前台HTML中添加属性的方法就可以成功。请问上面用后台传递的方法哪里出了问题?查了一些帖子,说
public string test
{
get
{
return Label1.Text;
}
set
{
Label1.Text = value;
}
}
这样处理也可以,但是执行时会报“未将对象设置到实例”的错误请问这种方式的正确的使用办法就这个传递参数的小问题,折腾了几个小时了,还没有结果,佛曰“人有二十难”,这个应该算是我的其中之一了,杀会人,然后睡觉,明天早上来解贴!!!没有比这简单的问题了,来抢分吧
调用页面:test.aspx
想实现:把test.aspx中的一个string的值传给WebUserControl1.ascx,WebUserControl1.ascx上用一个label把这个值显示出来
WebUserControl1.ascx中定义属性:
private string _test;
public string test
{
get
{
return _test;
}
set
{
_test = value;
}
}
WebUserControl1.ascx中加一个button,onclick事件下写
private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text = this.test;
}
test.aspx下
private void Page_Load(object sender, System.EventArgs e)
{
WebUserControl1 uc = new WebUserControl1();
uc.test = "test";
}
这种情况下点击button,Label1并没有取道test页面传过来的值,但是设断点跟踪_test = value一句是取到值了的。这是通过test页面后台代码传递参数的情况,用前台HTML中添加属性的方法就可以成功。请问上面用后台传递的方法哪里出了问题?查了一些帖子,说
public string test
{
get
{
return Label1.Text;
}
set
{
Label1.Text = value;
}
}
这样处理也可以,但是执行时会报“未将对象设置到实例”的错误请问这种方式的正确的使用办法就这个传递参数的小问题,折腾了几个小时了,还没有结果,佛曰“人有二十难”,这个应该算是我的其中之一了,杀会人,然后睡觉,明天早上来解贴!!!没有比这简单的问题了,来抢分吧
{
if(!Page.IsPostBack)//加这个
{
WebUserControl1 uc = new WebUserControl1();
uc.test = "test";
}
}
WebUserControl1.ascx的id为webUserControl1则在后台加上声明(假如在同一命名空间)(关键)
protected WebUserControl1 webUserControl1;private void Page_Load(object sender, System.EventArgs e)
{
webUserControl1.test = "test";
}
在调用页面里按你的方法做了,效果一样,在调用页面加ispostback的判断有用吗?to ofei
这种声明我之前就试过,在赋值webUserControl1.test = "test"这一句会报
未将对象引用设置到对象的实例,控件和调用页面在同一命名空间下,但是不用目录还有谁回答一下怎么直接在属性中赋值给Label1难道我的.net有问题?
没怎么用过asp.net =.=
在后台中添加下面的语句
protected WebUserControl1 webUserControl1; // 与前台定义的ID 同名private void Page_Load(object sender, System.EventArgs e)
{
if( ! this.IsPostBack )
{
//实例化一个对象,用以与前台定义的对象对应
webUserControl1 = new WebUserControl1();
} webUserControl1.test = "test";
}
方法1:
假设你前台页面是用webUserControl1做用户控件的id的
(webUserControl1.FindControl("Label1") as Lable).Text = "#####";
修改 WebUserControl1.ascx中定义属性:public string test
{
get
{
return Lable1.Text;
}
set
{
Lable1.Text = value;
}
}
{
Label1.Text = this._test;
}
在自定义控件里声明一个全局变量如;public string parentID="";
在test.aspx里声明控件时同时赋值如
<uc1:webUserControl1 id="MyControl1" runat="server" parentID=“XXX”></uc1:MyControl>
方法2:
在test.aspx.cs中
webUserControl innerControl= (webUserControl)e.Item.FindControl("MyControl1");
innerControl.test = "XXXXXX";
在自定义控件里
private string _test;
public string test
{
get
{
return _test;
}
set
{
_test = value;
}
}
报错的语句是:
Lable1.Text = value;
假设你前台页面是用webUserControl1做用户控件的id的
(webUserControl1.FindControl("Label1") as Lable).Text = "#####";protected uctest uc;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
//uctest uc = new uctest();
(uc.FindControl("Label1") as Label).Text = "sdfasdf";
}
(uc.FindControl("Label1") as Label).Text = "sdfasdf";
这句报“未将对象设置到实例”
{
Label1.Text = this._test;
}效果是一样的,还是取不到值
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["Text"] = value;
}
}
{
uc.test = "test";
}
你写的Label1.Text = this.test;能执行过去??换成Label1.Text = uc.test;