代码如下,盼望大家能帮忙解决,十分感谢.
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
public partial  class _Default : System.Web.UI.Page 
{
    protected  SoftWare  softWare;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
                InitSoftWareInfo();//给software 赋值
                         
        }
    }
    void initSoftWareInfo()
    { 
        //利用SoftwareFunciton类中的静态方法 GetSoftWareByComSoftwareID()返回一个Software对象的引用.这里是可以看到software 不为null
 
        softWare  = SoftWareFunction.GetSoftWareByComSoftwareID(new Guid(Request["comSoftwareID"]));      
    }
   
   //页面上按钮的click事件
    protected void btnOk_Click(object sender, EventArgs e)
    {
        string abc = softWare.SoftWareName;//这里报错 softWare 为null,Object Reference can not set to an instance of object
         
    }}为简单说明问题 GetSoftwareByComSoftwareID方法 可如下
 public static SoftWare GetSoftWareByComSoftwareID(Guid comSoftwareID)
        { 
            SoftWare sw=new SoftWare();
            sw.SoftWareName = "yumen";
           return sw;
       
        }

解决方案 »

  1.   

    页面回发了,但是没有执行:InitSoftWareInfo方法.去掉IsPostBack看看
      

  2.   

    先说一下Software类的定义是什么?和SoftwareFunciton类有什么关系?
      

  3.   

    TO:czhenq
     去掉 if (!IsPostBack)代码后,software 值不为空了.触发btnOk_Click事件时候,由于去掉了if (!IsPostBack)代码,因此在执行page_load时又执行了InitSoftWareInfo().我怎样保存第一次page_load 时候初始化了的软件对象呢,而不需要点了按钮又要重新调用InitSoftWareInfo().
    谢谢!TO:bitker
      Software 是基本数据结构,包括软件的一些属性信息,它的属性有 软件名,软件发布商,软件id等.
    而softwarefunction类则是一些和软件相关的 处理业务逻辑方法的类,它下面有这样的方法:
    GetSoftwareNameBySoftwareID,GetSoftwareIDByName等等.
      
      

  4.   

    在初始化变量后可以考虑将其的内容保存下来,比如放在Session、Cookies、ViewState等
      

  5.   

    if(! IsPostBack)
       ViewState["softWear"] = softWare;
    SoftWear sf = ViewState["softWear"]  as SoftWear ;