为什么在后台代码中创建的对象在aspx页面中不可用?

我有一个简单的问题。当我们在后面的代码(“。aspx.cs”)中创建一个对象时,为什么它在aspx页面中不可用。

例如,如果我有一个类(存在于另一个.cs文件中,而不是在后面的代码中),并且在该类中声明了属性,则可以说“Name”。

namespace BLL.SO
{
    public class SOPriceList
    {
        private string _name;
        public string Name
        {
            get { return _name;}
            set { _name = value; }
        }
    }
}

现在,当我创建一个对象时,可以在后面的代码(“。aspx.cs”)中说“obj”,并且在部分类中有作用域。

namespace Modules.SO
{    
    public partial class PriceListRecordView : PageBase
    {
        SOPriceList obj = new SOPriceList();

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

使用这个对象“obj”我可以访问该属性。那么为什么我不能使用相同的对象“obj”以这种方式获取aspx页面中的属性,

<%= obj.Name%>
0
额外 编辑
意见: 1

1 答案

现在当我创建一个对象时,让我们在代码中说“obj”   后面(“。aspx.cs”),使用这个对象“obj”我可以访问属性

目前还不清楚你创建这个 obj 实例的方式。如果它是后面代码中某个方法中的某个局部变量,那么显然这个变量的作用域就是方法本身,所以你不能在ASPX页面中访问它。

在ASPX页面中,您只能访问在后面代码中定义的当前WebForm的成员。所以这个 obj 必须在某个地方实例化。你可以在你的代码背后有一个属性:

protected SomeType MyObj
{
    get 
    {
        return ... some instance
    }
}

然后在ASPX页面中可以访问它:

<%= MyObj.Name %>

让我们来看另一个例子,它允许您在 Page_Load 事件中初始化属性,例如:

protected SomeType MyObj { get; private set; }

protected void Page_Load(object sender, EventArgs e)
{
    MyObj = new SomeType();
}
0
额外
对象“obj”在部分类中有作用域,在后面的代码中而不在任何函数中。
额外 作者 Bibhu,
@Darin Dimitrov - 更新了我的问题。
额外 作者 Bibhu,
@Darin Dimitrov - 谢谢,它的作品:)。我试过的更多问题,通过公开(出于好奇)而公开的,但它不起作用,请你向我解释。
额外 作者 Bibhu,
@Darin Dimitrov - 哦,是的。它的工作,犯了一个愚蠢的错误。很多很多感谢你,从你身上学到很多东西。 :)
额外 作者 Bibhu,
@Bibhu:这里的关键是 protected ,您无法访问派生类中的 private 成员。
额外 作者 leppie,
如果它不在函数内部,你能说明在代码中定义的 obj 究竟有多精确吗?你有财产或什么的?它的可见度是什么?
额外 作者 Darin Dimitrov,
谢谢。现在很清楚。您的 obj 变量是私人的,因此您无法在ASPX页面中访问它。使其受到保护: protected SOPriceList obj = new SOPriceList(); 。您可能会问:但为什么 obj 是私人的?答案是因为当你在类中声明一个字段时没有指定一个可见性修饰符时,C#编译器就会假设 private
额外 作者 Darin Dimitrov,
public 应该可以工作。它具有比 protected 更高的可见性级别。当你说它不起作用时你能更具体一点吗?什么没有用?你收到错误信息了吗?如果是的话,你得到了什么错误信息?
额外 作者 Darin Dimitrov,