【问题标题】:Accessing ASP control from webmethod从 webmethod 访问 ASP 控件
【发布时间】:2013-04-23 20:51:19
【问题描述】:

我继承了一些 ASP 2.0 webforms 代码来查询 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:Label id="stockLabel" runat="server"

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

stockLabel.Text = "120"

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

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

【问题讨论】:

  • 这是 C#,但 .Net 2 很容易转换。对于 1 个变量来说,这也是矫枉过正,但如果您有更多或需要定期在 JS 中引用 .Net 控件,我建议您这样做...johncmolyneux.blogspot.co.uk/2012/11/…

标签: jquery asp.net ajax vb.net


【解决方案1】:

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

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

就从网络方法访问页面控件而言,您是不允许的。这篇文章比我做得更好:Access ASP.NET control from static [WebMethod] (JS ajax call)

【讨论】:

  • 谢谢,这证实了我的怀疑。我将通过 jquery 设置标签跨度。
【解决方案2】:

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

如果您通过 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 中,您需要找到另一种在客户端上查找节点的方法(例如,使用特定的类)。

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多