【问题标题】:ViewState equal null asp.netViewState 等于 null asp.net
【发布时间】:2015-02-11 13:46:23
【问题描述】:

我有下一个代码。

protected void Page_PreRender(object sender, EventArgs e)
{ 
  bool isDelayWarning = proxy.MerchantPaySystemSetting_IsHoldPaymentsAllow(clientID, PaySystem.Type));
  ViewState.Add("IsDelayWarning", isDelayWarning);
}

protected void btnSend_Click(object sender, EventArgs e)
{
  if ((bool)ViewState["IsDelayWarning"] && !cbxDelayConfirm.Checked)
  {
    this.CustomErrorMessage = Yandex_Term_Error;
    return;
  }
}

在 btnSend_Click 方法中的 ViewState["IsDelayWarning"] = null。

我该如何解决这个问题?

谢谢! :)

【问题讨论】:

  • 一直在玩这个,我可以在点击处理程序null 中创建ViewState[key] 的唯一方法是禁用 ViewState。你能检查一下 ViewState 是否已启用。

标签: asp.net viewstate


【解决方案1】:

我不确定您要使用的逻辑,但是在页面呈现之前,在回发期间会发生按钮按下。在两个方法中设置断点以查看它们的相对顺序。

注意黄色标记的项目,控制事件处理就是其中之一,它严格发生在PreRender之前。

【讨论】:

  • 也许我在这里遗漏了一些东西,但根据问题,顺序不是:1)Page_PreRender 2)将页面服务到浏览器 3)btnSend_Click 4)Page_PreRender。但是一旦点击处理程序触发,它仍然应该在 PreRender 上设置 ViewState 值。
  • 在我的示例中,首先我渲染页面并取消 Page_Prerender。然后我调用 click 事件处理程序,此时我的 viewstate 对象为 null
  • 涉及两个不同的页面生命周期。一旦你在客户端按下按钮,一个全新的页面生命周期就会开始,通过PreRender 然后是事件处理程序,就像图片中一样。我的意思是您可以随意投反对票,它不会改变 ASP.NET 记录的工作方式。
【解决方案2】:

你总是可以通过做这样的事情来检查空引用

if (something != null)
code ------

或者如果你有时会有 null 的另一种方式是使用。例如如果用户地址为空

if (thisuser.Address == null)
{
 thisuser.Address = new Address();
}
thisuser.Address = user.Address.City;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2010-12-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多