.NET Core 2剃刀页面的Singleton Service属性未更新

时间:2019-08-06 10:21:45

标签: c# asp.net-core razor razor-pages

当我的页面加载时,我使用asp.net帮助器触发了2个不引人注目的Jquery请求,如下所示

    <div id="stdReplace">
                        <form method="get" data-ajax="true" data-ajax-url="/Stats/Index/QuickChart"
                              data-ajax-failure="PulseTs.HttpUtilsTs.httpRequestFailed"
                              data-ajax-success="stdOnComplete"
                              data-ajax-method="get"
                              data-ajax-begin="PulseTs.VisualHelpersTs.blockElement(stdReplace)"
                              data-ajax-update="#stdReplace"
                              data-ajax-mode="REPLACE-WITH"
                              class="quickChartForm">
                            <input type="hidden" name="id" value="std"/>
                        </form>
                    </div>
                </div>

两者均到达正确的处理程序并返回局部视图以更新其所处的父元素 处理程序:

 public async Task<IActionResult> OnGetQuickChart(string id)
        {
            await _serviceStats.GetGeneralStats(routeName, startDate, endDate);
            string key = "ssts" + id.First().ToString().ToUpper() + id.Substring(1);


            if (string.Equals(id, "avg"))
            {
                TempData["ChartTitle"] = "avg";
                TempData["ChartId"] = "avgChart";


            }
            else
            {

                TempData["ChartTitle"] = "std";
                TempData["ChartId"] = "stdChart";
            }
            return new PartialViewResult
            {
                StatusCode = 200,
                ViewName = "Stats/Partial/_QuickChartView",
                ViewData = ViewData,
                TempData = TempData
            };

现在,get GetGeneralTtats函数应该在内部更新服务属性之一,在我调试它时会这样做。但是我也将此服务注入到Razor页面视图中,当我尝试在javascript中检索该属性时,它为空

我将服务插入剃刀页面

@inject IServiceStats ServiceStats

并尝试如下恢复js中的属性

data = @Json.Serialize(ServiceStats.StatsVm.AvgData);

调试时我看到了

enter image description here

但是当我console.log(data)

我明白了

enter image description here

为什么单例服务的属性在应用程序的整个生命周期中都没有更新?

1 个答案:

答案 0 :(得分:1)

您已经部分发生在服务器上,部分发生在客户端上。将模型提供给视图,然后在JS中将其设置为data的值时,这一切都是在服务器端发生的。 data变量实际上甚至不存在,它只是涉及到所有服务器的文本。您只需将模型的序列化值转储到该位置的页面即可。然后,在返回响应之后,浏览器(客户端)在页面上运行JS,然后data才被设置为某种对象,该对象此时只是一个JS对象。

当您通过AJAX发出请求时,您可以影响服务器上的模型,但这对客户端已经完成的操作产生了影响。如果需要更新的数据,则需要向服务器发出专门针对此请求的请求,将该数据作为服务器的响应(JSON)返回,然后使用该JSON响应设置data JS变量