2015-07-02 36 views
0

我叫一个私人的,序列化的自定义对象类结果我的命名空间中,我用它来存储文件上传/服务器推送的结果:自定义对象类不能与ViewState的持续

namespace DataUploadTool 
{ 
enum errors {none, format, data, type, unk}; 

public partial class uploader : System.Web.UI.Page 
{ 
    private results res; 

    [Serializable] 
    private class results 
    { 
     public string errLogPath { get; set; } 
     public string fileName { get; set; } 
     public int errorType { get; set; } 
     public int rowsImported { get; set; } 
     public DateTime startTime { get; set; } 
     public DateTime endTime { get; set; } 
    } 

    ... 
} 

我设置在我的代码的标准方式对象的成员,即 res.fileName = fileUpload.FileName;

我的对象添加到ViewState的:

void Page_PreRender(object sender, EventArgs e) 
    { 
     ViewState.Add("resultsLog", res); 
    } 

试图检索它像这样:

protected void Page_Load(object sender, EventArgs e) 
    { 
     res = new results(); 

     if (IsPostBack) 
     { 
      if (ViewState["resultsLog"] != null) 
      { 
       results test; 
       test = (results)ViewState["resultslog"]; 
       error.Text = test.rowsImported.ToString(); 
      } 
      else // Do things 
     } 
    } 

的问题是我一直就行了error.Text = test.rowsImported.ToString();得到的NullReferenceException。

Visual Studio中内置的数据可视化工具告诉我,测试在从ViewState检索到的行后面为null,它根本没有任何意义,因为它被if声明!我完全丧失了这种情况发生的原因或原因。

任何帮助表示赞赏!

+0

上帝这个网站已经下山如此艰难。 – Answoquest

回答

0

我想通了哪里出了问题。

PostBack发生在ViewState保存之前,因为在此之前调用了我的数据库填充函数。

如果您遇到的问题在您的ViewState/Session变量是空的第一回发但继续回传包含来自以前的请求变量,这是发生了什么。

说明:假设每次数据库插入后(出现在button_onClick函数中)我想要在标签中显示插入的结果。为了下面的动作举例如下:

  1. 选择有效文件与数据上传 - >点击上传 - >发生回发和ViewState中/会话变量是
  2. 选择无效文件上传 - >点击上传 - >发生回发和ViewState中/ Session变量读取真正
  3. 选择有效要上传的文件 - >点击上传 - >回传发生和ViewState中/ SESS离子可变读取

所以当你看到更新的变量是可见的以下回发。

本质上,我根本不需要使用ViewState或Session。我可以在onClick函数末尾操作对象数据,因为那时回发已经发生。

TL; DR: 如果您遇到的ViewState或Session变量的问题/对象不是持久的,或正在经历奇“一次性”的逻辑错误,那么在涉及每一行代码中添加断点:

- View/Session state setting/getting 
- Function declarations which call these getters/setters 
- Any function which accesses database data (reading/writing) 

通过遵循这些面包屑,您将很快识别页面生命周期的进展顺序。