如何使用C#将模型放入我的视图?

时间:2015-06-29 17:27:01

标签: c# json asp.net-mvc razor

我已将JSON响应反序列化为一个对象。什么是下一个步骤?我有一个WebAPI控制器,我目前正在使用我的JSON对象。我需要获取这些数据并将其移动到视图中,以便我可以将其连接到我的Web组件。

我想我是否应该在控制器或视图中迭代我的JSON对象?我有以下内容:

var model = JsonConvert.DeserializeObject<MyData.RootObject>(Data);
foreach (var record in Data.rows)
{
    foreach (var nestedRecord in record.f)
    {
         List<string> list = new List<string>();
         list.Add(nestedRecord.v);         
    }
}
return View();

此外,我正在迭代这个模型,我无法在视图中返回模型,因为它超出了范围。

1 个答案:

答案 0 :(得分:3)

我在这里看到两个流行的选项,具体取决于您可能从反序列化对象访问的信息量。一,使用MyData.RootObject作为模型,并在视图中迭代它。如果您需要访问对象的其他属性,这将为您提供最大的灵活性:

var model = JsonConvert.DeserializeObject<MyData.RootObject>(Data);
return View(model);

在视图中(此无序列表标记只是一个示例),您可能有:

@model MyData.RootObject

<ul>
@foreach (var record in Model.rows)
{
    foreach (var nestedRecord in record.f)
    {
        <li>@nestedRecord.v</li>
    }
}
</ul>

或者,按照您的计划继续,但使用列表作为模型移动您在for循环之外填充的列表。就在视图中渲染对象而言,这将是最不灵活的:

var rootObject = JsonConvert.DeserializeObject<MyData.RootObject>(Data);
List<string> list = new List<string>();
foreach (var record in rootObject.rows)
{
    foreach (var nestedRecord in record.f)
    {
        list.Add(nestedRecord.v);         
    }
}
return View(list);

在这种情况下您的观点(比其他选项更简洁):

@model System.Collections.Generic.List<string>

<ul>
@foreach (var record in Model)
{
    <li>@record</li>
}
</ul>