FineUI 官方论坛

标题: 页面中实例变量的生命周期 [打印本页]

作者: szjazz    时间: 2014-2-12 02:04
标题: 页面中实例变量的生命周期
在页面代码里,定义了全局变量,放在类里面的变量,希望能在本页面未关闭前都可以调用,但发现很奇怪的一点,当页面初始化过程中该变量被赋值,然后在完成Page_Load显示了界面之后,想在随后的页面事件如按钮的点击里再次引用到该变量,却是空值了,在调试过程中,如果将该变量定义时加static修饰符则会继续保留变量值,我的代码页如下,想实现一个页面可完成添加、编辑功能,所以,需要定义action、customerid、modelCustomer变量等
  1. using System;
  2. using System.Collections.Generic;

  3. using System.Web;
  4. using System.Web.UI;
  5. using System.Web.UI.WebControls;

  6. using System.Data;
  7. using FineUI;
  8. namespace Jazz.CRM.Customer
  9. {
  10.     public partial class CustomerInfoEdit : PageBase
  11.     {
  12.         public int CustomerId { get; set; }
  13.         public string Action { get; set; }
  14.         Model.CRM.Customer modelCustomer = new Model.CRM.Customer();
  15.         protected void Page_Load(object sender, EventArgs e)
  16.         {
  17.             if (!IsPostBack)
  18.             {
  19.                 InitPage();
  20.             }
  21.         }
  22.         #region InitPage页面初始化
  23.         protected void InitPage()
  24.         {
  25.             InitPara();
  26.             InitPower();
  27.             InitEvent();
  28.             LoadData();
  29.             InitCtrl();
  30.             BindData();
  31.         }

  32.         protected void InitPara()
  33.         {
  34.             CustomerId = GetQueryIntValue("CustomerId");
  35.             Action = GetQueryStrValue("Action");
  36.             if (string.IsNullOrEmpty(Action))
  37.                 Action = "addnew";
  38.         }

  39.         protected void InitPower()
  40.         {
  41.             string powerName = string.Empty;
  42.             FineUI.Button btn = btnAddNew;
  43.             CheckPowerWithButton(powerName, btn);
  44.         }

  45.         protected void InitEvent()
  46.         {
  47.             btnClose.OnClientClick = ActiveWindow.GetHideReference();
  48.             btnAddNew.OnClientClick = Window1.GetShowReference("~/Customer/CustomerLinkManEdit.aspx", "新增联系人");
  49.         }
  50.         protected void LoadData()
  51.         {
  52.             if (CustomerId != 0 && Action == "edit")
  53.             {
  54.                 modelCustomer = bllApp.CRMCustomer.GetModel(CustomerId);
  55.                 txtCustomerName.Text = modelCustomer.CustomerName;
  56.             }
  57.         }
  58.         protected void InitCtrl()
  59.         {
  60.             appClass.DataRuleApp.ShowUI(ddlAvailable, "DdlAvailable", "");
  61.             appClass.DataRuleApp.ShowUI(ddlIndustry, "DdlIndustry", "");
  62.             appClass.DataRuleApp.ShowUI(ddlImportant, "DdlImportant", "");
  63.             appClass.DataRuleApp.ShowUI(ddlProvince, "DdlProvince", "安徽");
  64.             appClass.DataRuleApp.ShowUI(ddlBusiness, "DdlBusiness", "");
  65.             appClass.DataRuleApp.ShowUI(ddlBusiStage, "DdlBusiStage", "");
  66.             appClass.DataRuleApp.ShowUI(ddlEval, "DdlEval", "");
  67.             appClass.DataRuleApp.ShowUI(ddlMessFrom, "DdlMessFrom", "AAA");
  68.         }

  69.         protected void BindData()
  70.         {}

  71.         protected void CtrlEnable()
  72.         {}
  73.         #endregion

  74.         #region Events事件处理
  75.         protected void btnSave_Click(object sender, EventArgs e)
  76.         {
  77.             SaveData();
  78.         }
  79.         protected void btnSaveClose_Click(object sender, EventArgs e)
  80.         {
  81.             SaveData();
  82.             PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference());
  83.         }

  84.         protected void btnView_Click(object sender, EventArgs e)
  85.         {}

  86.         protected void btnEdit_Click(object sender, EventArgs e)
  87.         {}

  88.         protected void btnDelete_Click(object sender, EventArgs e)
  89.         {}

  90.         protected void btnImport_Click(object sender, EventArgs e)
  91.         {}

  92.         protected void btnExport_Click(object sender, EventArgs e)
  93.         {}
复制代码
变量Action跟踪发现,在InitPara完成初始化赋值,在LoadData还可以保留不变,但完成Page_Load事件显示了界面之后,点击Save按钮调用SaveData时发现Action还是恢复原有的null值了

不明所以,请路过的大师指点,如何处理



作者: sanshi    时间: 2014-2-12 09:54
但发现很奇怪的一点,当页面初始化过程中该变量被赋值,然后在完成Page_Load显示了界面之后,想在随后的页面事件如按钮的点击里再次引用到该变量,却是空值了


这点一点都不奇怪哦。每次点击按钮回发页面,整个页面都会重新加载一次,也就相当于页面类重新初始化一次,所以页面第一次加载时变量都丢失了。
所以才有 static,Session,ViewState 等多种持久化数据的方式,可以搜一下它们的区别
作者: szjazz    时间: 2014-2-12 15:54
页面变量:ViewState,每个用户拥有不同的值,但仅限于每个页面
会话变量:Session,每个用户拥有不同的值,整个网站
全局变量:Application、Static,所有用户拥有,如果某个用户因条件触发修改了值,则其他用户使用新值




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4