У меня есть действие контроллера, которое передает словарь в представление с помощью ViewBag.Преобразование словаря, который будет использоваться javascript
public async Task<ActionResult> MyAction() {
Dictionary<ATypeViewModel, IEnumerable<BTypeViewModel>> all = await GetDictionary();
ViewBag.MyData = all;
return View();
}
Внутри представления мне нужно использовать этот словарь для создания каскадного списка переключателей. Первый список будет содержит ключевые ценности, как
@{
Dictionary<ATypeViewModel, IEnumerable<BTypeViewModel>> services = ViewBag.MyData;
}
@foreach (KeyValuePair<ATypeViewModel, IEnumerable<BTypeViewModel>> entry in services) {
<div class="radio">
<label for="aType"><input type="radio" name="aType" value="@entry.Key.ATypeID" /> @entry.Key.Description</label>
</div>
}
мне нужно JQuery, чтобы создать этот код, но, к сожалению, я не знаю, как преобразовать словарь для использования JavaScript.
EDIT:
После hutchonoid ответ я сериализован мой словарь в JSON с помощью Json.NET.
Dictionary<ATypeViewModel, IEnumerable<BTypeViewModel>> list = new Dictionary<ATypeViewModel, IEnumerable<ATypeViewModel>>();
[...]
return await JsonConvert.SerializeObjectAsync(list);
, а затем добавил его в моем яваскрипте кода
var collection = @Html.Raw(Json.Encode(services));
, к сожалению, сериализованная строка не является правильным, как в следующем виде
var collection = {
ATypeViewModel: [
{ BTypeID: 11, Description: "..." },
{ BTypeID: 12, Description: "..." },
{ BTypeID: 13, Description: "..." },
{ BTypeID: 14, Description: "..." }
],
ATypeViewModel: [
{ ServiceTypeID: 21, Description: "..." },
{ ServiceTypeID: 22, Description: "..." },
{ ServiceTypeID: 23, Description: "..." },
{ ServiceTypeID: 24, Description: "..." }
]
}
Почему ключевой объект не правильно ли сериализоваться?
Можете ли вы сериализовать словарь в JSON с помощью JSON.net, а затем использовать эту строку в ViewBag? – ASG
Да, я мог. Моя проблема заключается в том, как использовать его из javascript. Не могли бы вы показать мне исходный образец? – Lorenzo
Либо это, либо вы используете api-controller и делаете вызов этому, чтобы получить ваши данные ... –