Majid Hojati Majid Hojati - 9 months ago 33
JSON Question

Pass an object to MVC View using json and Ajax

Hi I want to pass an object to my view and work with it in JavaScript. I've created this model

namespace WebApplication1.Models
public class OpenlayerLayer

public OpenlayerLayer(string Layers,string name,string url,string style,Boolean isqueryable,string projection,string maxEx)
LAYERS = Layers;

Name = name;

URL = url;
STYLES = style;
queryable = isqueryable;
this.projection = projection;
maxExtent = maxEx;
public string LAYERS { get; set; }
public string Name { get; set; }
public string URL { get; set; }
public string STYLES { get; set; }

public Boolean queryable { get; set; }

public string projection { get; set; }

public string maxExtent { get; set; }

and I used this method in controller

public string getLayerlist()
OpenlayerLayer ol = new OpenlayerLayer("Test: GParcel", "Parcels", "", "", true, "EPSG:900913", "5725524.327803587, 3835467.5859751734, 5729564.058979791, 3841404.792330884");

var json = JsonConvert.SerializeObject(ol);
return json;

well, I used this in my view

$(selector).getJSON('getLayerlist', data, loadopenlayers(data, status))

this is 'loadopenlayers' method

function loadopenlayers(result,status) {

alert("Seems works fine");
var layer = JSON && JSON.parse(result) || $.parseJSON(result);

var wms2 = new OpenLayers.Layer.WMS(, layer.URL,
format: format,
buffer: 0,
displayOutsideMaxExtent: true,
isBaseLayer: true,
projection: new OpenLayers.Projection(layer.projection),
minResolution: null,
maxResolution: 48,
numZoomLevels: 32,
maxScale: null,
minScale: 1271428,
maxExtent: new OpenLayers.Bounds(layer.maxExtent),
minExtent: null,
displayProjection: new OpenLayers.Projection("EPSG:4326"),


so It must work and then call
in JavaScript code,right?
Now I have a problem how do I work with result of

Is my method right way to communicate between models and JavaScript in view?
In fact I have a large number of JavaScript codes which must be customized using model parameters and I want a consistence and standard method to do it
Thanks very much


Better use jquery ajax call e.g:

          type: "POST",
          url: '/ControllerName/getLayerlist',
          // data: data,send data to controller from here
          dataType: 'json',
          //processData: false,
          success: function (msg) {
            //your json data will be available in msg
            //here you can also call loadopenplayers() method
          },error: function (error) {

Whereas your controller method will look like

public JsonResult getLayerlist(string data)
    OpenlayerLayer ol = new OpenlayerLayer("Test: GParcel", "Parcels", "", "", true, "EPSG:900913", "5725524.327803587, 3835467.5859751734, 5729564.058979791, 3841404.792330884");

    return Json(ol , JsonRequestBehavior.AllowGet);//automatically converts to Json