【发布时间】: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