2013-04-23 56 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里面,你需要找到找到客户端上的节点的另一种方式(通过使用特定的类例如)。