Передача Json из действия для просмотра с помощью ViewBag - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь получить результат ниже, используя JsonResult, но не могу

var localJSON = [

            { "id": "1", "label": "tagName1", "value": "tagValue1" },
                { "id": "2", "label": "tagName2", "value": "tagValue2" },
                { "id": "3", "label": "tagName3", "value": "tagValue3" },
                { "id": "1553", "label": "tagName1553", "value": "tagValue1553" }
    ];

Вот способ, которым я пользуюсь:

контроллер

private JsonResult GetAvailableTags()
        {
            var tagsList = Facade.Tags.Get(CurrentLocale.ID);
            var retValue = new
            {
                id = tagsList.Select(x => x.ID).ToArray(),
                label = tagsList.Select(x => x.Name).ToArray(),
                value = tagsList.Select(x => x.Name).ToArray()
            };
            return Json(retValue);
        }
public ActionResult AddPhoto()
        {

            var availblableTags = GetAvailableTags();
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            ViewBag.AvailableTags = serializer.Serialize(availblableTags.Data);
            return View();
        }

вид

var localJSON = [ @Html.Raw(ViewBag.AvailableTags)];

Результат

var localJSON = [
   {"id":[1,2,3,1553],"label":["tagName1","tagName2","tagName3","tagName1553" ],"value":["tagName1","tagName2","tagName3","tagName1553" ]}
        ];

Что я должен сделать, чтобы решить это?

1 Ответ

1 голос
/ 08 декабря 2011

Я полагаю, вы хотите получить x.Value для value в формате JSON? Затем измените ваше назначение на retValue на

var retValue = tagsList.Select(
    x => new 
    { 
        id = x.Id, 
        label = x.Name, 
        value = x.Value 
    }).ToArray();

В своем коде назначения retValue вы создавали отдельный объект анонимного типа с идентификаторами членов массива, меткой и значением. Для вывода вы хотите создать массив, каждый элемент которого является объектом с простыми полями id, name и value.

...