You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让属性修改仅作用于当前浏览器会话,不同步至其他会话?

问题原因与解决方案

问题根源

你遇到的跨浏览器同步问题,核心是静态成员的全局共享特性:
TestingClass中的Name是static属性,它属于类本身而非类的实例。在ASP.NET应用中,静态成员会被整个应用域内的所有请求共享——不管是哪个浏览器的会话,访问的都是同一个Name值,所以Chrome修改后,Firefox刷新会直接读取到更新后的全局值。

解决步骤

1. 修正类的属性设计

移除Name的static修饰符,将其改为实例属性,让每个类实例拥有独立的Name值:

namespace ScopedTest.Data
{
    public class TestingClass
    {
        public string? Name { get; set; } = "HAHA";
    }
}

2. 确保服务注册为Scoped生命周期

在Program.cs中,将TestingClass注册为Scoped服务,这样每个用户会话(请求上下文)会获得一个独立的类实例:

builder.Services.AddScoped<TestingClass>();

Scoped生命周期保证了不同浏览器会话之间的实例完全隔离,数据不会交叉共享。

3. 调整页面绑定逻辑

页面中需要绑定注入实例的Name属性,而非类本身,修正后的页面代码如下:

@using ScopedTest.Data
@inject TestingClass TestInstance

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<input type="text" @bind-value=@TestInstance.Name />

<p>@TestInstance.Name</p>

此时每个浏览器会话操作的都是自己专属实例的Name值,跨浏览器同步的问题就会消失。

内容的提问来源于stack exchange,提问作者Am Ma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:39:33