0

Web メソッドを照会して文字列を返す ASP 2.0 Web フォーム コードをいくつか継承しました。簡略化したバージョンは次のようになります。

コードビハインド

<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:Label id="stockLabel" runat="server" などの asp ラベル コントロールがあります。

現在、StockLevel関数を変更してラベルテキストを120に設定しようとすると、jquery呼び出しに文字列120が返され、アラートが表示されます。

stockLabel.Text = "120"

インテリセンスを取得しましたが、ページの値を更新していないようです。これは AJAX の性質によるものだと思います (この場合、ajax 呼び出しからの戻り値を使用してラベルの値を設定する必要があります。 )、おそらくこの時点でコントロールが読み込まれていないか、スコープの問題があります。これは正しいです?なぜこれが起こるのか知りたいのですが、これは私が期待する正しい動作ですか、それとも何か間違ったことをしていて、ラベルは正しい値で更新されるべきですか?

ポインタやアドバイスは素晴らしいでしょう。

4

2 に答える 2

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 内にない場合は、クライアントでノードを見つける別の方法を見つける必要があります (特定のクラスを使用するなど)。

于 2013-04-23T20:57:25.610 に答える
1

ASP ラベルはスパンとしてレンダリングされると思います。次のように変更できるはずです。

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

Web メソッドからページ コントロールにアクセスする限り、許可されていません。この投稿は、私ができるよりもはるかにうまく説明しています:静的 [WebMethod] (JS ajax 呼び出し) から ASP.NET コントロールにアクセスします。

于 2013-04-23T20:54:59.537 に答える