从静态函数访问控制属性

时间:2010-09-16 17:17:22

标签: c# asp.net vb.net controls static

这就是我所拥有的:

<textarea id="TextArea1" rows="6" cols="20" runat="server"></textarea>

并在代码隐藏中:

partial class _Default : System.Web.UI.Page
{
    [Webmethod()]
    public static void Data(int TestNum)
    {
        if (TestNum > 0) TextArea1.InnerText = "hello world";
    }
}

我收到以下错误:

Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.

据我了解,我需要在共享函数中声明类的实例,如下所示:

_Default NewInstance = New _Default();
NewInstance.TextArea1.InnerText = "hello world";

我的问题是,有什么方法可以避免这样做吗?这是不好的做法,这样做会给我带来什么样的记忆或性能损失?

谢谢。

编辑:我应该提到静态声明对于WebMethods来说是必要的

4 个答案:

答案 0 :(得分:1)

您需要从static方法中移除Data修饰符。

答案 1 :(得分:1)

如果目的是通过异步回调更改页面上的textarea,最好的办法是将其包装在UpdatePanel中,或者使用类似JQuery的东西来手动执行ajax调用。在后一种情况下,您只能从javascript引用textarea并异步获取内容。

答案 2 :(得分:1)

不要让它静止......

[Webmethod()]
public string Data(int TestNum)
{
    TextArea1.InnerText = "hello world";
}

答案 3 :(得分:1)

让我们把这些东西称为它们。它们是页面方法,它们需要声明为静态(C#)/共享(VB)。

这些页面方法无法访问页面变量的原因是:您必须将其视为客户端和服务器。服务器从客户端获取请求。服务器向客户端提供页面,在服务器上执行任何“抛光”。一旦服务器将数据发送到客户端,服务器就会忘记“抛光”内容甚至存在。您的客户端页面现在是一个孤儿。服务器太忙,总是喷出更多的孤儿。你的服务器就是这样的妓女。它没有时间跟上它生成的每个页面实例,特别是如果你每天每小时都有数百万人访问你的服务器。客户端刷新.Net中服务器内存的方式通常是通过回发,viewstate等机制。否则,服务器说,不,你不是我的孩子。

来自ajax和Page Methods。 Ajax收集服务器执行应用程序所需的基本处理并发送回信息所需的关键信息。用于此的通信介质通常是用于Page方法的JSON。所以现在服务器变成了信息的计算器或存储器,但是客户端仍然需要知道要发送什么信息,如何发送它以便服务器为您做任何事情。这是外行人对事情的解释。