2015-01-22 3 views
0

У меня есть база данных фильмов, и я ищу, чтобы создать Json, а затем получить доступ к этому json на мой взгляд. Я успешно создал JSON в контроллере, используя следующий код:Передача Json из контроллера для просмотра

var movies = from m in db.Movies 
        select m; 

    string jsonData = JsonConvert.SerializeObject(movies); 

Это создает JSON, который я прошел к консоли через WriteLine, и он генерирует следующий JSON:

[{"ID":1,"Title":"When Harry Met Sally","ReleaseDate":"1989-01-11T00:00:00","Genre":"Romantic Comedy","Price":7.99,"Rating":"PG","Review":79.90}, 
{"ID":2,"Title":"Ghostbusters ","ReleaseDate":"1984-03-13T00:00:00","Genre":"Comedy","Price":8.99,"Rating":"PG","Review":94.90},  
{"ID":3,"Title":"Ghostbusters 2","ReleaseDate":"1986-02-23T00:00:00","Genre":"Comedy","Price":9.99,"Rating":"15","Review":89.90}, 
{"ID":4,"Title":"Rio Bravo","ReleaseDate":"1959-04-15T00:00:00","Genre":"Western","Price":3.99,"Rating":"U","Review":91.90}, 
{"ID":5,"Title":"The Hangover","ReleaseDate":"2008-01-01T00:00:00","Genre":"Comedy","Price":9.99,"Rating":"18","Review":83.80}, 
{"ID":6,"Title":"Test","ReleaseDate":"2013-06-01T00:00:00","Genre":"Action","Price":10.00,"Rating":"18","Review":89.00}] 

Затем я хочу получить доступ к этому json в своем представлении и распечатать его в своем представлении. Я попробовал следующий код Ajax, но я не могу получить данные json для отображения.

<button id="test">Test</button> 
<div class="inner"></div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#test').on('click', function(){ 
     $.ajax({ 
     url: '@Url.Action("Index", "Movies")', 
     dataType: 'json', 
     context: document.body 
    }).done(function(serverdata) { 
     jsonData = serverdata; 
     $.each(jsonData, function(i, item) { 
      $(".inner").append("<p>" + jsonData + "</p>"); 
     }); 
    }); 
}); 
}); 
</script> 

Любые идеи? Что я делаю не так?

+0

$ (". Inner"). Append ("

" + jsonDa ta + "

"); Разве jsonData не должен быть элементом? – Hoijof

ответ

1

, если мы говорим о ASP.NET MVC, то вы можете сделать это:

код действия:

[HttpGet] 
public JsonResult Index(int? PageId) 
{ 
    //other your code goes here 
    var movies = from m in db.Movies 
       select m; 
    return Json(new {result = movies}),JsonRequestBehavior.AllowGet); 
} 

код клиента:

$.ajax({ 
     type: "GET", 
     url: '@Url.Action("Index", "Movies")', 
     dataType: 'json', 
     content: "application/json", 
     cache : false 
    }).done(function (serverdata) { 
     if(result.result.length > 0) 
     { 
      $.each(result.result, function(i, item) { 
       $(".inner").append("<p>" +"ID: "+ item.ID +", Title :" + item.Title+ "</p>"); 
      }); 
     } 
     else 
     { 
      alert("No movies in result"); 
     } 
    }).fail(function (jqXHR, textStatus) { 
     alert("Internal server error." + "\n" + jqXHR.statusText); 
    }); 
+0

Спасибо. Это сработало. Просто пришлось изменить: return Json (новый {результат = фильмы}), JsonRequestBehavior.AllowGet); - return Json (новый {результат = фильмы}, JsonRequestBehavior.AllowGet); – user1121477

+0

Клиентский код на самом деле ничего не делает. На странице отображается только json, и запрос ajax ничего не меняет. Нужно ли что-либо менять, чтобы позволить ajax управлять стилем и позиционированием json? – user1121477

+0

стилизация и позиционирование json? – aleha

0

попробовать: -

<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#test').on('click', function(){ 
     $.ajax({ 
     url: '@Url.Action("Index", "Movies")', 
     method: 'GET', 
     dataType: 'json', 
     context: document.body 
     }).done(function(serverdata) { 
     var jsonData = serverdata; 
     $.each(jsonData, function(i, item) { 
     $(".inner").append("<p>" +"ID: "+ item.ID +", Title :" + item.Title+ "</p>"); 
     }); 
    }); 
    }); 
}); 
</script> 
Смежные вопросы