C# Web用户控件中的访问类变量
我有一个类,它有一个属性和大约6个公共方法(没有什么是静态/共享的) 我的aspx页面将Class属性设置为某个值,一旦设置了该值,我就可以访问aspxPage中的类方法,现在一切正常。在我的aspx页面中有3个web用户控件,我需要访问这些web用户控件中的一些类方法,我不想在每个用户控件中创建类的新实例 例如,url的类别代码为25,当25传递给类时,类有不同的方法来创建面包屑、SEO友好的url等…并且不同的页面用户控件正在执行不同的任务,例如Class.CreateMenu、Class.PageTitle等C# Web用户控件中的访问类变量,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我有一个类,它有一个属性和大约6个公共方法(没有什么是静态/共享的) 我的aspx页面将Class属性设置为某个值,一旦设置了该值,我就可以访问aspxPage中的类方法,现在一切正常。在我的aspx页面中有3个web用户控件,我需要访问这些web用户控件中的一些类方法,我不想在每个用户控件中创建类的新实例 例如,url的类别代码为25,当25传递给类时,类有不同的方法来创建面包屑、SEO友好的url等…并且不同的页面用户控件正在执行不同的任务,例如Class.CreateMenu、Class.
那么,在我的aspx页面中插入类并让我的web用户控件访问其成员的最佳方式是什么呢?您必须在
page\u Init
或page\u Load
方法中实例化该类,并将其保存到Session
或ViewState
以便用户可以使用此引用控件
Session["myObj"]=new MyClass();
并读取bounded
对象
if(Session["myObj"]!=null){
MyClass obj=Session["myObj"] as MyClass;
if(obj!=null){
}
}
或者向每个用户控件添加公共属性/方法
public MyClass Data {get;set;}
protected void Page_Load(object sender, EventArgs e)
{
if(Data!=null)
Label1.Text = Data.Foo;
}
并从页面事件处理程序中分配对象引用(页面加载)
如果可能的话,我会处理这个问题,在.ascx用户控件中编写处理类的方法,然后调用该方法,从aspx页面将类传递给该方法 在类在aspx页面中实际设置之前,首先呈现控件,因此您唯一的其他选项是将类变量另存为会话、cookie或隐藏字段,如另一个答案所示 在aspx中,创建用户控件的新实例
<asp:PaymentInformation ID="PaymentInformation1" runat="server" />
在webusercontroll中全局声明如下
public int varriable1{ get; set; }
public int varriable2{ get; set; }
在webusercontroll中,分别将variable1和variable2访问到变量1和变量2中
int a=variable1;
int b=variable2;
在yourpage.aspx中将变量传递到webusercontroll中
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PostComments_global1.varriable1= 6; //PostComments_global1 is your webuseruser controll id
PostComments_global1.varriable2= 6;
}
}
有没有可能不用SESSION/VIEWSTATE来完成?这将给web服务器带来额外的压力。在经典Asp中,这非常简单…我们过去常常在页面顶部声明变量,并且所有包含文件都可以在整个页面中访问它。如果我的用户控件位于母版页的内容页内,那么我应该怎么做。我想我可以将一些公共属性公开给用户控制(如上所述),然后在母版页上访问它们?或者在用户控件中有一个隐藏字段,然后在母版页中访问它。如果母版页在内容页中,它可以访问用户控件的属性吗?是因为我的类/页设计有问题吗?或者这是与页面和控件共享值的唯一方法。我不确定您到底想做什么,您可以设置类值,但必须将它们存储在某个位置,否则在刷新页面时,它们将从服务器丢失,因为控件首先呈现,当您在aspx中设置类时,控件已经完成了它的代码,因此在调用aspx控件时,您必须已经设置了变量
int a=variable1;
int b=variable2;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PostComments_global1.varriable1= 6; //PostComments_global1 is your webuseruser controll id
PostComments_global1.varriable2= 6;
}
}