2010-04-24 60 views
2

我有一個級聯下拉(其中3個)類型,類別和子類別。先選擇類型,然後選擇類型,類別加載和選擇類別,子類別加載。 另外我有2個按鈕,「添加類別」和「添加子類別」點擊這些按鈕後,我調用一個JQuery模式窗體來添加它們。我在後面的代碼中使用Webmethod將它們添加到數據庫中JQuery,ASCX和webmethods似乎沒有工作

這在ASPX頁面中可以很好地工作。

由於我需要在3-4頁使用這個,我想把上述作爲用戶控制(ASCX)。當我嘗試在網頁中使用它時,ASCX中的webmethods不會被調用。

我的方法是否正確?應該爲我的場景做些什麼

向前推薦您的建議。

在此先感謝 KARTHIK

回答

0

是你的Web方法是在後面的代碼靜態方法被打上WebMethod屬性爲之前的「呼叫在ASP.NET網頁靜態方法」部分here描述你感動了嗎?如果是這種類型的webmethod只能在頁面級別工作,並且不能在用戶控件中使用。有關替代方法,請閱讀this page的前兩部分。

+0

是的網絡方法是靜態的。如果我將它作爲標準aSPX頁面,而不是作爲Web用戶控件,則同樣的作品。 順便說一句我正在使用ASP.NET 2.0與JQuery – KK99 2010-04-25 08:14:59

+0

@KarthikK,然後我支持我的答案,你不能將它們移動到用戶控件,並讓他們工作。 – drs9222 2010-04-25 11:37:49

6

我不認爲你可以在一個ASCX控件的WebMethod。 我解決它爲我的問題是這樣的:

AJAXBridge:

namespace Demo{ 
public partial class AjaxBridge : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    [WebMethod(EnableSession = true)] 
    public static string Control_GetTest() 
    { 
     return Control.GetTest(); 
    } 
}} 

Control.ascx.cs

namespace Demo{ 
public partial class Control : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    HttpContext.Current.Session["test"] = DateTime.Now.ToString(); 
    } 

    // ALMOST A WEB METHOD 
    public static string GetTest() 
    { 
     return " is " + HttpContext.Current.Session["test"]; 
    } 
}} 

Control.ascx

<script type="text/javascript">  
var dataSend = {}; 

$.ajax({ 
    type: "POST", 
    url: "AjaxBridge.aspx/Control_GetTest", 
    data: dataSend, 
    cache: false, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    beforeSend: function(data) { 
     alert("before"); 
    }, 
    success: function(data) { 
     alert("Page Load Time from Session " + data.d); 
    }, 
    fail: function() { 
     alert("fail"); 
    } 
}); </script> 

所以,你有一個ASPX它基本上就像所有Web控件中的所有AJAX方法的接口一樣。還有一些優點,例如對所有暴露的WebMethods進行概述和控制,這使得處理安全問題變得更容易(例如使用註釋)。