Как обновить значения сеанса при частичной публикации назад и как заставить Javascript использовать новые значения - PullRequest
1 голос
/ 04 октября 2011

Проблема, с которой я сталкиваюсь, заключается в том, что я передаю значения в javascript, чтобы нарисовать график, используя значения сеанса в коде позади.Когда страница загружается, она берет значение из сеанса и создает график, когда я делаю частичную публикацию с использованием панели обновления и таймера, я вызываю метод для добавления значений в сеанс, и он делает это.

public void messsagePercentStats(object sender, EventArgs args)
    {
     ...
       if (value >= lowtarg && value < Toptarg)
            {
                vProgressColor = "'#eaa600'";
            }
            else if (value >= Toptarg)
            {
                vProgressColor = "'#86cf21'";
            }
            Session.Add("vProgressColor", vProgressColor);
            Session.Add("vProgressPercentage", "["+value+"],["+remaining+"]");
             }
     }

Я использую панель обновления для вызова вышеуказанного метода

<asp:ScriptManager ID="smCharts" runat="server" />

        <asp:UpdatePanel runat="server" ID="Holder" OnLoad="messsagePercentStats" UpdateMode="Conditional">
            <ContentTemplate>
 <asp:Timer ID="Timer1" runat="server" Interval="5000" OnTick="Timer_Tick" />

, а метод timer_tick выполняется каждые 5 секунд

protected void Timer_Tick(object sender, EventArgs args)
    {            
          ScriptManager.RegisterStartupScript(this, this.GetType(), "key", "r.init();", true);
          ResponseMetric rm = new ResponseMetric(); 
        Holder.Update();        
    }

Я использую ScriptManager.RegisterStartupScript(this, this.GetType(), "key", "r.init();", true); вызвать r.init() метод Java-скрипта для рисования графика на посте, и он работает нормально.

Java-скрипт:

 var r = {  
        init : function(){  
   r = Raphael("pie"),

                    data2 = [<%= Session["vProgressPercentage"] %>];
                    axisx = ["10%", "20%"];
            r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif";
             r.g.barchart(80, 25, 100, 320, data2, { stacked: true, colors: [<%= Session["vProgressColor"] %>,'#fff'] });
             axis2 = r.g.axis(94, 325, 280, 0, 100, 10, 1);
        }
        }
          window.onload = function () {
          r.init();
        };

Этот Java-скрипт не получает новое значение отсеанс, он использует старое значение, когда страница была загружена.Как я могу изменить код, чтобы убедиться, что JS использует последнее значение сеанса.

Ответы [ 3 ]

0 голосов
/ 05 октября 2011

если вы используете серверный скрипт (<% = <em>ваш материал %>), вам нужно будет убедиться, что он выполняется на конце сервера при каждой частичной обратной передаче.Я думаю, проблема в том, что вы выполняете одну и ту же функцию сценария (впервые загруженную) снова и снова с каждым частичным возвратом.Попробуйте зарегистрировать всю функцию с каждым частичным постбэк вместо того, чтобы только вызывать функцию ... Я программист VB

Private _strObj as String = "var r = { init : function(){ ...data2 = ["+Session("vProgressPercentage")+"]; ...}} r.init()"

ScriptManager.RegisterStartupScript(Me.Page, Me.GetType, Guid.NewGuid.ToString, _strObj , true)

*** Я не проверял это, но дайте мне знать, если я должен внести какие-либо изменения

0 голосов
/ 05 октября 2011
protected void Timer_Tick(object sender, EventArgs args)
{            
      ScriptManager.RegisterStartupScript(this, this.GetType(), "key", 
         "r.init('"+ Session["vProgressPercentage"]  +"','"+ Session["vProgressColor"] +"');", true);
      ResponseMetric rm = new ResponseMetric(); 
      Holder.Update();        
}


var r = {  
    init : function(vProgressPercentage, vProgressColor){  
        r = Raphael("pie"),

        data2 = [vProgressPercentage];
        axisx = ["10%", "20%"];
        r.g.txtattr.font = "12px 'Fontin Sans', Fontin-Sans, sans-serif";
        r.g.barchart(80, 25, 100, 320, data2, { stacked: true, colors: vProgressColor,'#fff'] });
         axis2 = r.g.axis(94, 325, 280, 0, 100, 10, 1);
       }
    }
0 голосов
/ 04 октября 2011

Я думаю, что эта ситуация такая же, как упомянуто в этом посте http://jquerybyexample.blogspot.com/2010/07/jquery-does-not-work-properly-after.html

Вы можете попробовать функцию pageLoad (), которая доступна при использовании ASP.NET AJAX

...