2012-06-06 37 views
0

我打電話給我的服務器端方法的jquery和從那個方法我想要訪問文本框數據。這是我的示例代碼關於從靜態方法訪問頁面控制的問題asp.net 4.0

[WebMethod] 
    public static PayPalCart CreatePayPalFields() 
    { 
     Page CurPage = HttpContext.Current.Handler as Page; 
     string tt = ((TextBox)CurPage.FindControl("txtBillAddress1")).Text; 
    } 

我收到錯誤用於從靜態方法和錯誤消息訪問控制未設置爲一個對象的實例對象引用。然後我搜索谷歌找出更好的解決方案,然後我有一個擴展方法,將通過控制收集和返回控制,如果找到循環。的代碼是這樣

public static T BetterFindControl<T>(this Control root, string id) where T : Control 
{ 
    if (root != null) 
    { 
     if (root.ID == id) return root as T; 

     var foundControl = (T)root.FindControl(id); 
     if (foundControl != null) return foundControl; 

     foreach (Control childControl in root.Controls) 
     { 
      foundControl = (T)BetterFindControl<T>(childControl, id); 
      if (foundControl != null) return foundControl as T; 

     } 
    } 

    return null; 
} 

我使用上述程序也從靜態方法等

[WebMethod] 
    public static PayPalCart CreatePayPalFields() 
    { 
     Page CurPage = HttpContext.Current.Handler as Page; 
     string sData = CurPage.BetterFindControl<TextBox>("txtDeliveryFName").Text; 
    } 

但仍沒有運氣....仍得到相同的錯誤用於從靜態方法訪問控制,並發現CurPage沒有控制權。請告訴我該怎麼辦。告訴我一個出路從靜態方法訪問控制,因爲方法必須是靜態的原因,我通過jquery調用該方法.........需要幫助。

+0

您無法從webmethod訪問控件。 http://stackoverflow.com/questions/2133194/access-asp-net-control-from-static-webmethod-js-ajax-call只有在頁面的生命週期中,「Page」(及其所有控件)的一個實例被實例化。 –

回答

0

您無法從此ajax調用訪問該頁面,這很簡單,因爲在發生此調用時頁面不存在任何位置。

你可以做的是發送你喜歡的參數,通過ajax調用,並通過使用JavaScript來獲取併發送它們。

再多說幾句呼叫。

string sData = CurPage.BetterFindControl<TextBox>("txtDeliveryFName").Text; 

這是對.FORM後數據的最後調用read什麼是ID爲txtDeliveryFName控制發送。在您的ajax調用中,沒有完整頁面的帖子,另一方面,您可以控制通過javascript將什麼數據發佈到webmethod。