c# - I am trying to make AngularJS/MVC Asp.Net app and I stuck while trying to get JSON data from controller -
task make web aplication mp3 file managment.
list of functionalities application should have:
adding, editing , deleting mp3 parameters (song name , author ...)
adding, editing , deleting playlists
adding mp3 files in numbers of playlists
searching files name, author , playlist (search should done on server)
view of each entry should able bookmark(add favorites) in browser
back , forward buttons should work on whole application in browser
technical requirements:
application should made single page web application fetches data using ajax calls
angularjs should used on client side , asp.net mvc on server side
data should stored in persisten storage
upon first start application should able add test data in database
so far have made mvc asp.net application , added sql database model first approach. has 2 tables 'playlist' , 'song' (one many relationship). later on have auto generated songcontroller , playlistcontroller (mvc 5 controller views,using entity framework).now have make angularjs on client fetches json data song , playlist controllers.
my main goal make this:https://imgur.com/a/mms2o
with functionalities respecting request
- angularjs should used on client side , asp.net mvc on server side
now trying show playlist view inside song view (i woud list playlists under song list in same page)
i have initialzed ng-app , ng-controller , other must actions when adding angular app
2. trying json data playlist controller , part stuck
this code inside playlistcontroller.cs
public class playlistcontroller : controller { private managermodelcontainer db = new managermodelcontainer(); // get: /playlist/ public actionresult index() { return view(db.playlistset.tolist()); }
and have added
// get: /playlist/plget public jsonresult plget() { return json(db.playlistset.tolist(),jsonrequestbehavior.allowget); }
the thing when go /song/plget error: https://imgur.com/iximm8x
i have tried adding this: context.configuration.proxycreationenabled = false; context nothing changes.
<#=accessibility.fortype(container)#> partial class <#=code.escape(container)#> : dbcontext { public <#=code.escape(container)#>() : base("name=<#=container.name#>") { <# if (!loader.islazyloadingenabled(container)) { #> context.configuration.proxycreationenabled = false; // have tried write managermodel insted of context because name of context still doesnt work :/ this.configuration.lazyloadingenabled = false; <# }
so please can u give me advice on should do? maybe trying on again, using framework or maybe ssolution problem.
edit:
these models:
namespace konacno.models { using system; using system.collections.generic; public partial class playlist { public playlist() { this.song = new hashset<song>(); } public int id { get; set; } public string playlistname { get; set; } public virtual icollection<song> song { get; set; } } }
namespace konacno.models { using system; using system.collections.generic; public partial class song { public int id { get; set; } public string name { get; set; } public string singer { get; set; } public string year { get; set; } public int playlistid { get; set; } public virtual playlist playlist { get; set; } } }
you playlistname
model contains property list<song>
, song
contains property playlistname
, circular reference error generataed default javascriptserializer
. can use alternatives such json.net has optional settings handling these errors. solved passing data need client, either using view model or passing collection of anonymous objects
var data = playlistset.select(x => new { id = x.id, playlistname = x.playlistname, songs = x.song.select(y => new { id => y.id, name => y.name, singer => y.singer, year => y.year }) }); return json(data, jsonrequestbehavior.allowget);
or , create view model(s) properties needed in view
public class playlistvm { public int id { get; set; } public string playlistname { get; set; } public ienumerable<songvm> songs { get; set; } } public class songvm { public int id { get; set; } public string name { get; set; } public string singer { get; set; } public string year { get; set; } }
and above query becomes
var data = playlistset.select(x => new playlistvm() { .... songs = x.song.select(y => new songvm() { .... }) });
Comments
Post a Comment