代码如下:
headermodule.ascx.cs
public class headermodule : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Image imageLogo;
private string _LogoType;
public string LogoType 
{
get 
{
return _LogoType;
}
set 
{
_LogoType = value;
ChangeImage ();
}
}
         }
---------------------------------------------------------------------------
groupwizard.aspx
<%@ Register TagPrefix="Module" TagName="Header" Src="../modules/headermodule.ascx" %>
...
<TD align="center" id="cellHeader" runat="server">
<Module:Header id="header" runat="server" LogoType="1"></Module:Header>
</TD>
.....
---------------------------------------------------
groupwizard.aspx.cs
...
protected ACard.modules.headermodule header;
...
private void Page_Load(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
    {
header = (ACard.modules.headermodule)cellHeader.FindControl ("header");
header.EnableViewState = true;
header.LogoType = "4";    //  这句话是没有问题的
    }
}private void btnNext_Click(object sender, System.EventArgs e)
    {
header = (ACard.modules.headermodule)cellHeader.FindControl ("header");
         // 上面这句话无论有没有,得到的都是null
header.LogoType = "2";
          //  最后的异常是:未将对象引用设置到对象的实例。 

    }-------------------------------------------------
我的问题是,如何才能和其他控件一样使用用户控件,如何在才能在任何时候操作用户控件的属性。

解决方案 »

  1.   

    header = (ACard.modules.headermodule)cellHeader.FindControl ("header");
    把这句去掉
      

  2.   

    Page_Laod 里面去掉header = (ACard.modules.headermodule)cellHeader.FindControl ("header");
    效果还是一样的。
    在if (!Page.IsPostBack)里面怎么写都没有问题。在别处写,怎么写都有问题。
      

  3.   

    所有FindControl 都去掉也一样...
      

  4.   

    这个问题很简单,它主要跟服务器控件的运行机制有关。当点一个控件时它是先刷新在执行命令的。
    你的问题就出在这,你点按钮后自动刷新了,而你的用户控件却没有在你的Page_load事件中声明,没声明的东西当然不能用的。
    解决方法:1在Page_load中声明下。2把if(!IsPostBack)去掉,也就是所有的要触发的事件都不要放在里面
      

  5.   

    To hch1981(命运) 
    去掉if(!IsPostBack) 后,页面第一次载入时有效,刷新后就得不到用户控件的实例了,最开始我也没用if(!IsPostBack) ,是刷新时才发现这个问题的。