2013-04-23 65 views
0

我繼承了一些ASP 2.0 web表單代碼查詢一個WebMethod並返回一個字符串訪問ASP控制,它的簡化版本是從的WebMethod

代碼隱藏

<System.Web.Services.WebMethod()> _ 
Public Function StockLevel() as String 
    return "120" 
End Sub 

.aspx頁面中

function GetStockLevel() { 
$.ajax({ 
    type: 'POST', 
    url: 'Stock.aspx/StockLevel', 
    // data: '{ }', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'text', 
    success: function (data) { 
    alert(data); 
    } 
}); 
} 

的頁面上有一個asp的標籤控件如ASP:標籤ID = 「stockLabel」 RUNAT = 「服務器」

目前,它返回字符串120到jQuery的調用,並顯示警告,當我嘗試修改StockLevel函數來設置標籤文本120如

stockLabel.Text = "120" 

我得到智能感知,但它不會出現更新頁面上的值,我想這是由於AJAX的性質(在這種情況下,我應該使用ajax調用的返回值來設置標籤的值),並且該控件可能不會在這一點或有一個範圍問題。它是否正確?我想知道爲什麼發生這種情況,這是我應該期望的正確行爲還是我做錯了什麼,標籤應該更新正確的值?

任何指針或建議將是偉大的。

+0

這是C#,但.Net 2很容易轉換。它也是1變量的矯枉過正,但如果你有更多或需要定期參考.Net中的.Net控件,我推薦這個... http://johncmolyneux.blogspot.co.uk/2012/11/reference- aspnet-control-in-javascript.html – Archer 2013-04-23 21:02:42

回答

1

我相信ASP標籤得到呈現爲跨度,你應該能夠改變它,像這樣:

success: function (data) { 
    $("#<%=stockLabel.ClientID %>").text(data); 
} 

至於從Web訪問方法頁面控件,你不準。這篇文章進入它比我更好:Access ASP.NET control from static [WebMethod] (JS ajax call)

+0

謝謝,這證實了我的懷疑。我將通過jquery設置標籤跨度。 – norbert 2013-04-23 21:05:44

1

當你通過AJAX調用webmethod時,你不能這樣做。

如果您通過AJAX撥打電話,則無法訪問您的Web表單控件,因爲您實際上並未請求該頁面,而只是調用該方法。

相反,你應該使用jQuery找到標籤並通過JavaScript更新:

function GetStockLevel() { 
$.ajax({ 
    type: 'POST', 
    url: 'Stock.aspx/StockLevel', 
    // data: '{ }', 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'text', 
    success: function (data) { 
     $("#<%=stockLabel.ClientID %>").text(data); // this only works if the javascript is in your .aspx-file 
    } 
}); 
} 

如果腳本是不是你的.aspx裏面,你需要找到找到客戶端上的節點的另一種方式(通過使用特定的類例如)。