从静态方法调用UserControl方法

时间:2014-07-24 20:28:00

标签: asp.net ajax user-controls asp.net-ajax

我正在尝试在我的asp.net应用程序中执行ajax调用。 我有一个aspx页面和一个ascx页面。

首先,在我的Eccezioni.aspx中,我声明了我的UserControl

 <%@ Register TagPrefix="UC" TagName="UserControlEccezioni" Src="~/Eccezioni.ascx" %>
 ....
 <div><UC:UserControlEccezioni runat="server" ID="ucEccezioni"/></div>

我有这个ajax功能:

 $.ajax({
                    type: "POST",
                    url: "Eccezioni.aspx/CheckExistingVariable",
                    data: '{var: "' + eccSplitt[i] + '" }',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function () {
                        alert(response.d);
                    },
                    failure: function () {
                    alert("ko");
                }
                });

在Eccezioni.aspx.cs中我有Webmethod:

 [System.Web.Services.WebMethod]
    public static Boolean CheckExistingVariable(string var)
    {
        return ucEccezioni.CheckExistingVariable(var);
    }

问题是我无法访问我的ucEccezioni变量。 我能做什么?

2 个答案:

答案 0 :(得分:0)

您无法从静态方法访问实例方法。这是一个包含铁的规则,这意味着您无法从WebMethod访问控件(或页面)的非静态属性或方法,即使WebMethod嵌入在WebMethod中也是如此控制或页面。

您有很多选择。以下是几个:

  1. 不是在网页中使用ucEccezioni.CheckExistingVariable,而是创建一个Web服务来执行ucEccezioni.CheckExistingVariable所做的任何事情,并通过Ajax调用它。这是大多数人推荐的。

  2. 使方法CheckExistingVariable成为静态方法。如果你能做到 - 如果UpdatePanel不使用任何实例属性或方法 - 这将是一个非常简单的方法来摆脱你的困境。但是,它不如选项1优雅。

  3. 使用{{1}},如果它与您的整体设计兼容。

答案 1 :(得分:0)

关于Ann L的答案2,这对我不起作用。我仍然收到错误消息:“无法从共享方法中引用类的实例成员”。我通过实例化用户控件类的新实例并调用静态方法来解决此问题。

[System.Web.Services.WebMethod]
public static Boolean CheckExistingVariable(string var)
{
    ucEccezioniClass uc = new ucEccezioniClass();
    return uc.CheckExistingVariable(var);
}