如何在MVC视图.cshtml中使用json数据

时间:2017-12-16 14:09:28

标签: c# json asp.net-mvc

我希望有人可以帮助我: 我的挑战是,我有一个返回json的Web服务。

格式为

{"stations":[{"name":"aname","free":false},{"name":"anothername","free":true}]}

所以我有一个对象,它是一个包含n属性的n个对象的数组.... 现在对于该对象数组中的每个对象,我想呈现属性,如

<p>stations[0].name</p>

我需要在mvc中使用它。 所以我创建了一个模型

public station(){}
public string name {get; set;}
public boolean free {get; set;}

在我的控制器中我使用WebClient,现在我需要处理响应。 我在想IEnumerable,但我不知道怎么把它放在视图中?!

我的目标是了解我如何做像

这样的事情
public Actionresult Stations(){
var stations = JObject.Load(reponse);
return View(Stations);
}

但我不知道如何处理数组的每个对象并在Stations.cshtml视图中使用每个或类似的值获取它们的值....

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,这是我的方式。

模型

创建一个将JSON反序列化为的类:

public class RootJson
{
    public IEnumerable<station> Stations { get; set; }
}

RootJson类有一个属性,其中包含station个实例(您的类)的列表:

public class station
{
    public string name { get; set; }
    public bool free { get; set; }
}

控制器

然后,使用以下命令反序列化您的JSON:

var deserialized = JsonConvert.DeserializeObject<RootJson>(json);

将电台传递到视图:

return View(deserialized.Stations);

视图

在您的视图中,您必须指定传递的数据类型,在本例中为IEnumerable<station>。因此,在Stations.cshtml添加:

的顶部
@model IEnumerable<station>

您可以使用foreach来迭代模型:

@foreach(var station in Model)
{
    <p>@station.name</p>
}

编辑:澄清的完整代码

模型

RootJson.cs

public class RootJson
{
    public IEnumerable<station> Stations { get; set; }
}

station.cs

public class station
{
    public string name { get; set; }
    public bool free { get; set; }
}

控制器

内部 YourController.cs

public ActionResult Stations() {
    string json = YourMethodToGetJsonAsString();
    var deserialized = JsonConvert.DeserializeObject<RootJson>(json);
    return View(deserialized.Stations);
}

视图

Stations.cshtml

@model IEnumerable<station>

@foreach(var station in Model)
{
    <p>@station.name</p>
}

答案 1 :(得分:0)

最简单的方法之一是使用ViewBag:

public ActionResult Stations()
{
    string jsonString = "{ \"stations\":[{\"name\":\"aname\",\"free\":false},{\"name\":\"anothername\",\"free\":true}]}";
    ViewBag.stations = ((dynamic)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString)).stations;
    return View();
}

并在cshtml中为ex。

<p>@ViewBag.stations[0].name</p>

答案 2 :(得分:0)

<强>模型

public class Stations
{
    public List<Station> Station { get; set; }
}
public class Station
{
    public string Name { get; set; }
    public bool Free { get; set; }
}

<强>控制器

// Deserialising JSON
var station = JsonConvert.DeserializeObject<Stations>(response);
// Pass result to view
return View(station.Station);

查看

Stations.cshtml添加:

的顶部
@model IEnumerable<Station>

您可以使用foreach来迭代模型:

@foreach(var station in Model)
{
    <p>@station.Name</p>
}