【问题标题】:Singleton Service properties not updated .net core 2 razor pages单例服务属性未更新.net core 2 razor pages
【发布时间】:2019-12-13 21:06:31
【问题描述】:

当我的页面加载时,我使用 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
            };

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

我在剃须刀页面中注入服务

@inject IServiceStats ServiceStats

并尝试在 js 中检索该属性,如下所示

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

调试时我看到了这个

但是当我 console.log(data)

我明白了

为什么单例服务的属性不更新不应该在应用程序的整个生命周期中保持不变?

【问题讨论】:

  • 实例的属性是update,但是你的JS没有那个实例。它有一个副本,该副本是一个较旧的状态,尚未填充属性
  • 剃刀视图不应该保存对该对象引用的副本,因此该对象上也会发生任何更新吗?如果不是,您知道我如何实现这一点,以便它可以反映这些更新吗?

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


【解决方案1】:

这部分发生在服务器上,部分发生在客户端上。当您的模型提供给视图,然后在您的 JS 中设置为 data 的值时,这一切都发生在服务器端。 data 变量实际上并不存在,它只是所有服务器相​​关的文本。您的模型的序列化值只是被转储到该位置的页面。然后,响应返回后,浏览器(客户端)在页面上运行JS,然后只有data被设置为某个东西,此时它只是一个JS对象。

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

【讨论】:

  • 谢谢你,我很怀疑,但得到确认后,我就可以停止以这种方式尝试并按照你建议的方式去做。
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2018-02-17
  • 2018-07-17
  • 2019-07-05
  • 2020-05-08
  • 2018-11-08
相关资源
最近更新 更多