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

如何引用并修改其他Razor视图中创建的公共类Model的Title属性?

解决方案

你在单个Razor视图里定义的Model类和model实例只能在当前视图内部访问,跨视图直接调用根本行不通。要实现跨视图共享并修改这个Title属性,得按下面的方式调整:

1. 把Model类移到共享位置

别在Razor视图的@code块里定义公共类,这种类的作用域仅限当前视图编译后的程序集,其他视图根本找不到它。把Model类抽出来,放到项目里的共享类文件(比如新建Models/SharedPageModel.cs):

public class SharedPageModel
{
    public string Title { get; set; } = string.Empty;
}

2. 根据场景选状态共享方式

场景一:父子视图/组件之间传递

如果两个视图是父子嵌套关系,直接通过组件参数传递实例就行:

  • 父视图(持有实例的一方):
@code {
    private SharedPageModel model = new SharedPageModel();

    protected override void OnInitialized()
    {
        model.Title = "初始标题";
    }
}

<!-- 把实例传给子视图 -->
<ChildView SharedModel="model" />
  • 子视图(接收并修改的一方):
@code {
    [Parameter]
    public SharedPageModel SharedModel { get; set; } = new();

    private void UpdateTitle()
    {
        SharedModel.Title = "修改后的标题";
    }
}

<p>当前标题:@SharedModel.Title</p>
<button @onclick="UpdateTitle">修改标题</button>

场景二:全局跨页面共享

要是两个视图是完全独立的页面,就得用全局状态管理,比如Blazor的单例服务:

  1. 先在Program.cs里注册全局服务:
builder.Services.AddSingleton<SharedPageModel>();
  1. 然后在任意视图里注入就能用:
@inject SharedPageModel GlobalModel

<p>全局标题:@GlobalModel.Title</p>
<button @onclick="() => GlobalModel.Title = '全局修改后的标题'">修改全局标题</button>

注意事项

  • Blazor Server里用全局单例要注意线程安全,多个用户会共享同一个实例;Blazor WebAssembly里的单例是客户端独立的,每个用户各自持有一份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:41:29