2015-02-11 48 views
0

我有下一个代码。ViewState等于null asp.net

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。

我该如何解决这个问题?

谢谢! :)

+0

刚刚一直在玩这个,唯一的方法,我可以使'ViewState [键]'在点击处理程序'null'是通过禁用ViewState。你可以检查ViewState是否启用。 – 2015-02-11 14:07:30

回答

1

我不确定你想要的逻辑,但是按钮推送发生在页面渲染之前的回发期间。在两种方法中加入断点以查看它们的相对顺序。

You can see a diagram here

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

+0

也许我错过了这里的东西,但根据这个问题不会有顺序:1)Page_PreRender 2)服务页面浏览器3)btnSend_Click 4)Page_PreRender。但是,一旦点击处理程序触发,它应该仍然在PreRender上设置ViewState值。 – 2015-02-11 14:01:08

+0

在我的示例中,首先呈现页面并且void Page_Prerender。然后我打电话点击事件处理程序,在这一点上我的viewstate对象为空 – IFrizy 2015-02-11 14:20:48

+0

有两个不同的页面生命周期涉及。一旦你在客户端按下你的按钮,整个新页面的生命周期就开始了,就像在图片中一样,通过'PreRender'和事件处理器。我的意思是你可以降低所有你想要的,它不会改变ASP.NET如何被记录*工作。 – Blindy 2015-02-11 16:12:27

0

您可以随时检查空引用做这样的事情

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

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

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