0

クライアント側で処理したい JSON オブジェクトがいくつかありますが、指定した WebMethod を起動したくありません。

クライアント側スクリプトで使用した Ajax メソッドと GetJson メソッドは次のとおりです。

$(document).ready(function() {
         $(document).ready(function() {
             //attach a jQuery live event to the button
             $('#getdata').live('click', function() {
             $.getJSON('/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions', function(data) {
               //alert(data); //uncomment this for debug
              // alert(data.item1 + " " + data.item2 + " " + data.item3); //further debug
             $('#showdata').html("<p>item1=" + data.item1 + " item2=" + data.item2 + " item3=" + data.item3 + "</p>");
        });
    });
});

アヤックスはこちら

$(document).ready(function () {
        $.ajax({
            type: "POST",
            url: "/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: "{}",
            success: function (res) {
                $('#Results').append(CreateTableView(res)).fadeIn();
            }
        });
    });

これらのメソッドはどちらも、次のような WebMethod である StockPlacementOptions を呼び出します。

 [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json,
    UseHttpGet = true, XmlSerializeString = false)]
    public static List<StockReturnMethod> StockPlacementOptions()
    {
        scmEntitiesPrimaryCon entities = new scmEntitiesPrimaryCon();
        var binOptions = (from avail in entities.ProductAvailibleBins(1, 2)
                          select new StockReturnMethod() { LotID = (int)avail.LotID, LotName = avail.LotName, AreaID = (int)avail.AreaID, AreaName = avail.AreaName, BinID = (int)avail.BinID, BinName = avail.BinName }).ToList();

        return binOptions;
    }

$(document).ready イベントで JSON Web メソッドを起動することができれば、そこからデータを処理して操作することができます。また、データ処理機能を備えたKnockoutJSのような別の jQuery ライブラリを調べてみましたが、運もありませんでした。フレームワーク 4 で Html5 マークアップを使用して ASP Web フォームを使用しています。

どんなアドバイスでも大歓迎です。

4

2 に答える 2

0

document.ready()クライアント側で getJson と ajax の2 つのハンドラーを使用している理由

$(document).ready(function() { // <-------you can remove this handler

     $(document).ready(function() {
         $('#getdata').live('click', function() {
         $.getJSON('/Members_Only/StockMovement/WebForm1.aspx/StockPlacementOptions', function(data) {
           //alert(data); //uncomment this for debug
          // alert(data.item1 + " " + data.item2 + " " + data.item3); //further debug
         $('#showdata').html("<p>item1=" + data.item1 + " item2=" + data.item2 + " item3=" + data.item3 + "</p>");
         });
     });
});  // <-------you can remove this handler

これが問題になるかどうかはわかりませんが、これが役立つ場合はこれを試してください。

于 2012-12-03T10:56:35.000 に答える
0

KnockoutJS と ajax の組み合わせを使用して修正しました。

ノックアウトJSマッピングモデルを利用することで、返されたJSONを好きなように操作できます:)

これは、マッピングを行い、サーバーから JSON を取得する Jquery です。

<script type="text/javascript">
//Declareing Viewmodel For KnockoutJS
    var viewModel;
    //Using Mapping Plugin for Knockout JS
    function bindModel(data) {
        viewModel = ko.mapping.fromJS(data);
        console.log(viewModel);
        ko.applyBindings(viewModel);
    }

    //Onload ObtainJSON
    $(document).ready(function () {
        $.ajax({
            url: "WebForm1.aspx/StockPlacementOptions",
            // Current Page, Method
            data: {},
            // parameter map as JSON
            type: "POST",
            // data has to be POSTed
            contentType: "application/json",
            // posting JSON content
            dataType: "JSON",
            // type of data is JSON (must be upper case!)
            timeout: 10000,
            // AJAX timeout
            success: function (result) {
                bindModel(result);
            },
            error: function (xhr, status) {
                alert(status + " - " + xhr.responseText);
            }
        });
    });

</script>

また、必要な結果を得るために Webmethod を少し変更しました。

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static List<StockReturnMethod> StockPlacementOptions()
    {
        scmEntitiesPrimaryCon entities = new scmEntitiesPrimaryCon();

        var binOptions = (from avail in entities.ProductAvailibleBins(1, 2)
                          select new StockReturnMethod() { LotID = (int)avail.LotID, LotName = avail.LotName, AreaID = (int)avail.AreaID, AreaName = avail.AreaName, BinID = (int)avail.BinID, BinName = avail.BinName }).ToList();

        return binOptions;
    }

それだけです:D

助けてくれてありがとう

于 2012-12-04T10:21:21.383 に答える