从webmethod访问ASP控件

时间:2013-04-23 20:51:20

标签: jquery asp.net ajax vb.net

我继承了一些ASP 2.0 webforms代码,它们查询webmethod并返回一个字符串,它的简化版本将是

背后的代码

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

.aspx Page

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:Label id =“stockLabel”runat =“server”

当我尝试修改StockLevel函数以将标签文本设置为120时,它会将字符串120返回到jquery调用并显示警报,例如

stockLabel.Text = "120"

我得到intellisense,但它似乎没有更新页面上的值,我想这是由于AJAX的性质(在这种情况下我应该只使用来自ajax调用的返回值来设置值)标签。),此时控件可能未加载或存在范围问题。它是否正确?我想知道为什么会发生这种情况,这是我应该期待的正确行为,还是我做错了什么,标签应该用正确的值更新?

任何指针或建议都会很棒。

2 个答案:

答案 0 :(得分:1)

我相信ASP标签会被渲染为Spans,您应该可以像这样更改它:

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

至于从Web方法访问页面控件,您不被允许。这篇文章比我更好:Access ASP.NET control from static [WebMethod] (JS ajax call)

答案 1 :(得分:1)

当你通过AJAX调用web方法时,你不能这样做。

如果您通过AJAX拨打电话,则无法访问您的网络表单控件,因为您实际上并未请求该页面,而您只是调用该方法。

相反,你应该找到带有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中,您需要找到另一种在客户端上查找节点的方法(例如,使用特定的类)。