#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
?. С помощью adynamic
вы можете получить доступ к определенным свойствам, но вы не можете перебирать его, как массив.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>