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

C# Razor Pages如何访问多层实例化类中的变量?

问题分析与解决方案

你的代码存在三个核心问题,导致视图无法访问目标变量:


1. DataRaw 是局部变量而非模型类的公共属性

你在OnGet方法里定义的DataRaw是方法内部的局部变量,视图无法直接访问方法内的局部变量。必须把它改成IndexModel类的公共属性,视图才能通过模型实例访问。

2. Bclass 中的 A1 是私有字段

C#中类成员默认访问修饰符是private,所以Bclass里的A1外部无法访问,需要改成public。

3. 视图中访问模型属性的语法错误

视图中应该通过@Model访问模型实例的属性,而不是直接用@IndexModel(这是类名,不是实例)。


修正后的完整代码

1. 修正Aclass和Bclass

public class Aclass
{
    public string AString; // 这里已经是public,没问题
}

public class Bclass
{
    // 把A1改成public,外部才能访问
    public Aclass A1 = new Aclass();
}

2. 修正Index.cshtml.cs

把DataRaw从局部变量改成模型类的公共属性:

public class IndexModel : PageModel
{
    // 定义公共属性,视图可以访问
    public Bclass DataRaw { get; set; }

    public void OnGet()
    {
        // 初始化属性
        DataRaw = new Bclass();
        // 可以给AString赋值测试
        DataRaw.A1.AString = "测试内容";
    }
}

3. 修正Index.cshtml中的访问语法

<!-- 通过@Model访问模型的公共属性 -->
<p>@Model.DataRaw.A1.AString</p>

额外说明

如果不想把A1设为public,可以在Bclass里加一个封装的属性,符合面向对象的封装原则:

public class Bclass
{
    private Aclass A1 = new Aclass();
    // 提供公共属性暴露AString
    public string AString 
    { 
        get => A1.AString; 
        set => A1.AString = value; 
    }
}

这样视图里可以直接写@Model.DataRaw.AString,无需直接访问内部的A1实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:05:18