通过回调将代码背后的变量发送到网页

Sending variables from code behind to web page via callback

本文关键字:变量 网页 背后 回调 代码      更新时间:2023-09-26

我必须制定一个回调方法来更新我的网页,而不需要发出回发请求。有一个问题,我需要认识到它必须显示什么类型的消息。

在网页中,我有以下代码:

<form id="form1" runat="server">
        <dx:ASPxCallbackPanel ID="ASPxCallbackPanel2" runat="server" Width="200px" ClientInstanceName="ASPxCallbackPanel2" autopostback="false" OnCallback="ASPxCallbackPanel2_Callback">
            <PanelCollection>
                <dx:PanelContent>
 <% if(ViewState["message_ok"].Equals(1)){ %> 

   <div class="notification-summary-container">
       <dx:ASPxLabel ID="ASPxLabel3" runat="server" Text="ASPxLabel"></dx:ASPxLabel>

       </div>
(...)
 <% if(ViewState["message_ok"].Equals(2)){ %> 
<div class="notification-summary-error">
(...)
But there is a problem when I call the `JavaScript` function to perform the callback like:
function call(s, e)
{
   ASPxCallbackPanel2.PerformCallback();
   e.processOnServer = false;
}
My ViewState is not updated in the callback method
protected void ASPxCallbackPanel2_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
{
   ASPxLabel3.Text = "blabla";
   ViewState["message_ok"]=1;
}

我知道这是由于回发后更新视图状态引起的,但回调方法不回发。我想知道是否有可能通过回调将变量发送到网页代码,或者通过JavaScript设置适当的消息。

Sir,回调无法访问其范围之外的内容,请尝试使用Session而不是ViewState。这是最简单的方法。

或者尝试第二种方式,将Label1添加到callbackPanel tag中并设置ClientSideVisiable to false,然后将值设置为此Label1.Text = "OK"

您可以使用JSProperty:

protected void ASPxCallbackPanel2_Callback(object sender, DevExpress.Web.ASPxClasses.CallbackEventArgsBase e)
{
   ASPxCallbackPanel panel = sender as ASPxCallbackPanel;
   panel.JSProperies.Clear();
   // JSProperties have to begin with a 'cp'
   panel.JSProperties.Add("cpIsOk", true);
}

在客户端,您可以处理EndCallback:

ASPxCallbackPanel_EndCallback(s, e){ 
   if(s.cpIsOk != null && s.cpIsOk == true){
      // Do your stuff here...
      s.cpIsOk = null;
   }
}