日期:2014-05-18  浏览次数:20437 次

[请前辈们到来,本人有结贴习惯]对用户控件的一点疑惑.
用户控件页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 文件,那么继承继承此类