Объект Json.Net передан View во ViewData - PullRequest
1 голос
/ 24 февраля 2011

У меня есть страница, на которой я реализовал ajax-вызов контроллера, который возвращает результаты поиска, которые упакованы в JsonNetResult.

У меня много javascript для работы с возвращаемым пакетом, итерации по каждому элементу в наборе результатов и вывода на страницу.

Теперь, однако, мне нужно реализовать использованиеиз этих же методов для одного элемента, который будет известен при загрузке страницы.Я хотел бы просто передать эту информацию в словарь View в ViewData.

Однако я не знаю, как использовать Json.Net таким образом.

Как загрузить объект Json.Net в собственную переменную json при загрузке страницы, если предположить, что объект был вставлен в ViewData ["DeepLinkedMessage"]?

Я начал спускатьсяПуть этого:

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);

Работало просто отлично.Но я быстро заметил, что мне придется решать проблемы с форматированием даты, которые я уже решил, когда настраивал вызов ajax, который возвращал JsonNetResult.Я хочу использовать те же методы, которые я использую сейчас.

Итак, я начал по этому пути:

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 ]

1 голос
/ 25 февраля 2011

Ну, я узнал из здесь , что я могу просто сделать это:

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

<вытирает руки> "проблема решена!"

0 голосов
/ 24 февраля 2011

Вы должны настроить ваш взгляд на точную реализацию вашей модели:

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

Тогда, по вашему мнению, вы можете сделать

Model.Property

Я просто считаю, что проще определить, где проблемапроисходит (плюс просмотр данных может быть боль в заднице)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...