Json对象是mvc View中的C#模型对象

时间:2017-12-09 18:27:56

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

我将json对象渲染为视图源的一部分。我想将该json转换为C#模型对象并将该对象传递给局部视图,因为部分视图强烈地类型化为模型对象。

例如:

jsonIdentifier = '{"Identifier": { "name":"uno","contextId":"dos"}}'

@{ model.Identifier = Parsing(jsonIdentifier)}
@Html.Partial("_IdentifierPartial", m=>m.Identifier) //where Identifier is the object needs to be passed to  _IdentifierPartial 

2 个答案:

答案 0 :(得分:0)

您应该使用@ Html.Action而不是@ Html.Partial。只需将jsonIdentifier作为字符串参数传递,然后使用Json.NET将其转换为适当的类型对象。

如...

Output my partial with that Json:
<div>
    @{
        string json = "{Make: \"Toyota\", Model: \"Camry\", Year: 2017}";
    }
    @Html.Action("RenderCarScreen", new { carJson = json });
</div>

您的网络方法看起来像这样......

    public ActionResult RenderCarScreen(string carJson)
    {

        Car car = Newtonsoft.Json.JsonConvert.DeserializeObject<Car>(carJson);
        return PartialView("CarScreen", car);
    }

答案 1 :(得分:0)

我们可以在@Html.Action()@Html.Partial的帮助下实现这一目标。 @Html.Action()需要操作方法,在动作方法的帮助下呈现部分页面。 @Html.Partial()不需要操作方法,基于它呈现页面的对象值。因此@Html.Partial()@Html.Action()相比具有更好的效果。

using Newtonsoft.Json;
@{
     string JsonStr = {\"user\":\"me\",\"payment_method\":\"card\",\"items_bought\":[{\"id\":\"001\",\"name\":\"desk\",\"delivered\":\"true\"},{\"id\":\"455\",\"name\":\"chair\","delivered\":\"false\"},{\"id\":\"234\",\"name\":\"mousepad\",\"delivered\":"false\"},{\"id\":\"135\",\"name\":\"cabinet\",\"delivered\":\"false\"}]}
     var JsonObject = JsonConvert.DeserializeObject<MyJSON>(JsonStr);
}
<div>
     @Html.Partial("_IdentifierPartial", JsonObject) 
</div>

上述代码可以正常运行并达到您的要求。但是这种方法不可取,更好的是你可以将json字符串转换为控制器端的模型对象并将模型对象传递给视图。

对于Ex:

@model ModelClass
<div>
     @Html.Partial("_IdentifierPartial",Model.PartialModel)
</div>

以上方法使浏览器中的页面更快。