0

このトピックに関する他の投稿は役に立ちましたが、完全ではありません。次のように、Wcf サービス (MVC 4 プロジェクトに含まれています) からデータを取得しています。

WarehouseController.cs

WarehouseInput objWI = new WarehouseInput();
  
    public ActionResult Index(WarehouseInput value)
    {           
        objWI.count = 15;
        objWI.offset = 0;
        objWI.query = "";
        objWI.sort = "ID";
        objWI.order = "asc";
        objWI.ID = 0;
        objWI.RowID = 0;
        Service1 c = new Service1();
        c.GetWarehouseList(objWI);
        //var model = c.GetServices();
    update 1  ----->      return View(objWI);
        //return GetWarehouseList(objWI);
  update 2  ----->     //return Json(objWI, JsonRequestBehavior.AllowGet);
    }

Jsonオブジェクトでデータを取得しています...

取得したデータ

Index.cshtml 編集:

  @model MvcApplication1.WS.DataContracts.WarehouseInput

 @{
ViewBag.Title = "Index";
 }

 <h2>Index</h2>

<script type="text/javascript">
alert('0');
$.ajax({
    url: '@Url.Action("Index")',
        type: 'GET',
        cache: false,
        success: function(resp) {
            alert(resp);
            if (resp.WarehouseResults != null) {
                var objTemp = resp.WarehouseResults;

                            //var from = resp.offset, to = from + resp.WarehouseResults.length;
                            //data.length = parseInt(resp.total);
                            //for (var i = 0; i < resp.WarehouseResults.length; i++) {
                            //    data[from + i] = resp.WarehouseResults[i];
                            //    data[from + i].index = from + i;
                            //}
                            //$("#lblRows").html("<b>Total: " + resp.total + "</b>");
                            //onDataLoaded.notify({ from: from, to: to });
                        }
                        else {
                            //i = indicators.pop();
                            //if (i != null)
                            //    i.fadeOut();
                            alert('Error loading the page');
                        }
            alert('1');
        }
    });
alert('1.5');
var values = @Html.Raw(Json.Encode(Model.WarehouseResults));
var data = [];

var grid;
var validator;


 

問題は、コントロールが cshtml に移動しないことです。json オブジェクトをビュー (UI) に渡すにはどうすればよいですか? 使用している slickgrid に表示するにはどうすればよいですか? 編集: JavaScript コードを修正する必要がありますが、まずそこに到達するためのコントロールを取得する必要があります。

4

2 に答える 2

1

JSON ではなくビューを返す必要があります。あなたが望むことをするコメントアウトされた行があります:

return View(objWI.WarehouseResults);

cshtml ファイルには、それを JSON に変換する別の行があり、これもコメントアウトしています。

var values = @Html.Raw(Json.Encode(Model.WarehouseResults));

私が理解できないのは、アクション メソッドと JavaScript で GetWarehouseList を呼び出している理由です。

JavaScript からのサービスの呼び出しは、ページを読み込まずにデータを再読み込みするのに最適です。しかし、あなたは本当にそれをしようとしていますか?ページがロードされたときに一度だけ JQuery.ready で呼び出すだけです。ただし、ページをロードすると、ViewModel を使用して JSON を HTML に埋め込むことができます。

stylojack_10: "これは答えではないかもしれませんが、私は最終的に私たちの議論で答えを得たので、これを答えとしてマークしています."

于 2013-08-16T13:25:59.427 に答える
0

JavaScript から Ajax 呼び出しを行い、受け取った結果を滑らかなグリッドにバインドすることができます。

あなたのAjaxコールは次のとおりです。

    $.getJSON("ActionName", success = function (data) {
    //Your Code to bind slick grid data
});

そして、あなたの行動は次のようになります。

        public ContentResult ActionName()
    {
        var jsonString = JsonConvert.SerializeObject(YourObject, serializerSettings);
        return Content(jsonString);
    }
于 2013-08-16T16:44:41.407 に答える