Создание массива с ключами в Razor

#c# #asp.net #razor

#c# #asp.net #razor

Вопрос:

В настоящее время я работаю над проектом, и то, что я пытаюсь сделать, это создать массив с ключами в razor.

Это то, что у меня есть сейчас:

 string[] members = {@item.Name, @item.Url };
  

Это то, что мне нужно:

 string[] members = {pageName: @item.Name, pageUrl: @item.Url };
  

Как я могу этого добиться?

Комментарии:

1. Вы не можете, для этого вам понадобится словарь или анонимный объект. Но зачем вам это нужно? Вероятно, есть лучшие решения.

2. Вы уверены, что вам нужен массив, а не a dynamic ?. С помощью a dynamic вы можете получить доступ к определенным свойствам, но вы не можете перебирать его, как массив.

3. Мне нужно отобразить объект JSON на моей странице из Razor, но я не знаю как.

Ответ №1:

Вы не можете сделать это с помощью массивов, однако вы можете использовать словарь со строкой в качестве ключей.

 Dictionary<string, string> member = new Dictionary<string, string>
{
     { "pageName", item.Name },
     { "pageUrl", item.Url }
};
  

Ответ №2:

Мне нужно отобразить объект JSON на моей странице из Razor […]

Для этого вам не нужен массив. Звучит так, как будто вы на самом деле просто хотите объект. Вы можете создать объект, а затем отобразить его в формате json.

 @ {
    object members = new { pageName = @item.Name, pageUrl = @item.Url};
}

<script>
    var myObj = @Html.RenderAsJson(members); // With HtmlHelper.
    var myObj2 = @Html.Raw(Json.Encode(members)) // Without HtmlHelper.
</script>
  

И вспомогательный метод, если вы предпочитаете этот вариант:

 public static class HtmlHelpers
{
    public static IHtmlString RenderAsJson(this HtmlHelper helper, object model)
    {
        var obj = JsonConvert.SerializeObject(model,
            new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });
        return helper.Raw(obj);
    }
}
  

Теперь у вас есть вызываемый объект javascript myObj . И вы можете получить доступ myObj.pageName из javascript.

В качестве альтернативы вы можете использовать dynamic , если хотите получить доступ к элементу в вашем представлении, но не в javascript.

 @ {
    dynamic members = new { pageName = @item.Name, pageUrl = @item.Url};
}

<span>@members.pageName</span>