Json.Net对象传递给ViewData中的View

时间:2011-02-24 20:35:40

标签: asp.net-mvc-2 json.net

我有一个页面,我在其中实现了对控制器的ajax调用,该控制器返回打包在JsonNetResult中的搜索结果。

我有很多javascript来处理返回包,迭代结果集中的每个项目并输出到页面。

但是,现在,我需要为页面加载时已知的单个项目实现这些相同方法的使用。我想将此信息传递给ViewData字典中的View。

但是,我不知道如何以这种方式使用Json.Net。

如果将对象填充到ViewData [“DeepLinkedMessage”]中,如何在页面加载时将Json.Net对象加载到本机json变量中?

我开始沿着这条道路前进:

var thisMessage = (from userMessageProduct  .... more linq2sql stuff...);
bool success = (thisMessage.Count() == 0) ? false : true;
var returnPackage = new { success = success, results = thisMessage };
JavaScriptSerializer serializer = new JavaScriptSerializer();
ViewData["DeepLinkedMessage"] = serializer.Serialize(returnPackage);

它运作得很好。但我很快注意到,当我设置返回JsonNetResult的ajax调用时,我必须解决我已经解决的日期格式问题。我想使用我现在使用的完全相同的方法。

所以,我开始走这条道路:

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = returnPackage;
ViewData["DeepLinkedMessage"] = jsonNetResult.ToString();

然后,在我看来:

<script type="text/javascript">
    deepLinkedMessageId = '<%=ViewData["DeepLinkMessageId"] %>';
    deepLinkedMessageRaw = '<%=ViewData["DeepLinkedMessage"]%>';
</script>

但是这回来了:

<script type="text/javascript">
    deepLinkedMessageId = '1';
    deepLinkedMessageRaw = 'WebUI.Controllers.JsonNetResult';
</script>

虽然我正在寻找类似的东西:

<script type="text/javascript">
    deepLinkedMessageId = '1';
    deepLinkedMessageRaw = '{"success":true,"results":[{"UserId":1,"InternalId":"1356935180","FirstName":"Scott","LastName":"Roberson","MessageId":1,"MessageText":"i just love your product!!!", "MessageCreateTime":"\/Date(1295289549930)\/","ProductId":5,"Flavor":"Almonds","ActivePixel":false,"ActiveClass":null,"TileNumber":0}]}';
</script>

帮助使用Json.Net吗?

感谢。

2 个答案:

答案 0 :(得分:1)

好吧,我从here发现我可以这样做:

bool success = (thisMessage.Count() == 0) ? false : true;
var returnPackage = new { success = success, results = thisMessage };
ViewData["DeepLinkedMessage"] = JsonConvert.SerializeObject(returnPackage, new IsoDateTimeConverter());

&lt;擦手&gt; “问题解决了!”

答案 1 :(得分:0)

您应该设置视图以明确地实现您的模型:

Inherits="System.Web.View<YourModelName>"

然后在你看来你可以做到

Model.Property

我发现这更容易隔离问题发生的地方(加上viewdata可能是一个痛苦的屁股)