2014-07-24 192 views
0

我想在我的asp.net應用程序中做一個ajax調用。 我有一個aspx頁面和一個ascx頁面。從靜態方法調用UserControl方法

在我Eccezioni.aspx首先我聲明我的用戶

<%@ 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變量。 我能做什麼?

回答

0

您無法從靜態方法訪問實例方法。這是一個鐵桿規則,這意味着即使WebMethod嵌入在同一控件或頁面中,也無法訪問WebMethod中控件(或頁面)的非靜態屬性或方法。

您有多種選擇。這裏有幾個:

  1. 而不是在網頁中使用WebMethod,創建Web服務做任何ucEccezioni.CheckExistingVariable做,並通過Ajax調用它。這是大多數人推薦的。

  2. 使方法ucEccezioni.CheckExistingVariable成爲一種靜態方法。如果你可以做到這一點 - 如果CheckExistingVariable不使用任何實例屬性或方法 - 這將是一個擺脫困境的非常簡單的方法。但是,它不如選項1優雅。

  3. 如果它與您的整體設計兼容,則使用UpdatePanel