如何创建我在aspx页面中声明的Literal的对象引用。
现在我将它用作ltlContents.Text = .....
,但我需要引用ltlContents
,因此我可以在静态方法中使用它,就像我使用.Text
属性一样。
我试过类似Literal ltl = ...
的东西,但这对我来说是新的,因为它与通常的对象引用不同,因为它来自前端。
UPDATE:我想在静态方法中使用ltlContents对象,如下所示:ltlContents.Text = valueFromSomeFunction
,但编译器给出了以下错误:An object reference is required for the non-static field, method, or property _Default.ltlContents
。
答案 0 :(得分:2)
您需要引用控件或此控件所在的页面。此页面必须在实际生命周期中运行。因此,例如从web方法中,您无法访问控件。
但是,您可以使用静态方法访问此控件,这似乎是您想要的:
public static void SetControlText(string controlID, string text)
{
Page page = HttpContext.Current.Handler as Page;
if (page != null)
{
Control ctrl = FindControlRecursive(page, controlID);
if(ctrl != null)
{
ITextControl txt = ctrl as ITextControl;
if(txt != null)
txt.Text = text;
}
}
}
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id) return root;
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null) return t;
}
return null;
}
现在,这可以在页面的生命周期中随处可见:
SetControlText("ltlContents", "Hello world");
答案 1 :(得分:0)
因为每个请求都会提供页面的新对象作为响应(他们的html)。
所以不可能这样做
而不是将literal
用于函数make函数返回函数中的值并使用它。或者使用文字的值来运作。