[请前辈们到来,本人有结贴习惯]对用户控件的一点疑惑.
用户控件页Test.ascx,其中放了一个下拉列表控件ddlUser.为了在其它页面中得到所选中的值,因此定义了一个属性如下:
public string SelectValue
{
get
{
return this.ddlUser.SelectedValue;
}
}
在其它页面中加载此用户控件后,命名为User,为了得到选中的值,通常做法为:
Test p = (Test)Page.FindControl( "User ");
string a = p.SelectValue;//得到属性值
=====================================
上面的程序是正确的.
不明白的是:
我写成
Test p = new Test();
string a = p.SelectValue;//这里却出错.错误信息为:未找到对象的实例.
请前辈们说说错误的原因.谢谢
------解决方案--------------------动态加载用户控件应该使用 LoadControl方法
------解决方案--------------------1。
LZ Test 构造器中 new 了 DropDownList 了迈?
假如 你的 DropDownList 是通过托拽到 .ascx 的,那么 asp.net 会解析此 .ascx 页面,并实例化相关的控件,而你直接 new 的 .ascx.cs ,跳过了这一层
2。
ASP.NET 页面以及控件的初始化有一套规范,要看清本质
动态加载用户控件用 Page.LoaControl(ascx虚拟路径);
3。
新手需要明白的是,任何 .aspx .ascx 文件最终也是由 asp.net 引擎自动解析并编译成一个 .cs 文件,如果指定 .aspx.cs 文件,那么继承继承此类