0

如何对我在 aspx 页面中声明的 Literal 进行对象引用。现在我使用它,ltlContents.Text = .....但我需要对其进行引用,ltlContents以便我可以在静态方法中使用它,就像我使用它的.Text属性一样。

我尝试了类似的东西,Literal ltl = ...但这对我来说是新的,因为它不同于通常的对象引用,因为它来自前端。

更新:我想在这样的静态方法中使用 ltlContents 对象:ltlContents.Text = valueFromSomeFunction,但编译器给了我以下错误:An object reference is required for the non-static field, method, or property _Default.ltlContents

4

2 回答 2

2

您需要对控件或该控件所在的页面的引用。该页面必须在实际生命周期中运行。因此,例如,您无法从 webmethod 访问控件。

但是,您甚至可以从静态方法访问此控件,这似乎是您想要的:

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");
于 2013-09-04T11:23:02.050 回答
0

因为对于每个请求,页面的新对象都会作为响应(它们的 html)提供。所以这是不可能的。
不要将它literal用于函数,而是让函数从您的函数返回一个值并使用它。或者使用字面量的值来运行。

于 2013-09-04T11:23:52.667 回答