在aspx中创建现有Literal的对象引用

时间:2013-09-04 11:12:23

标签: c# asp.net object-reference

如何创建我在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

2 个答案:

答案 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函数返回函数中的值并使用它。或者使用文字的值来运作。