Как условно визуализировать атрибут стиля в шаблоне Razor, не вызывая NullReferenceException?C#

Место общения программистов C#
Anonymous
Как условно визуализировать атрибут стиля в шаблоне Razor, не вызывая NullReferenceException?

Сообщение Anonymous »

Я работаю над проектом шаблонов, используя C# и Razor Engine (Razor Templating Engine). Цель состоит в том, чтобы создать код React, используя мое собственное определение JSON.
Мой AppDefinition.json выглядит так, когда я хочу визуализировать тип ввода:

Код: Выделить всё

{
"app": {
"name": "AppName",
"pages": [
{
"name": "UserDetailsForm",
"url": "/list",
"state": {
"firstName": {
"type": "string",
"value": ""
},
"lastName": {
"type": "string",
"value": ""
}
},
"layout": {
"type": "Linear",
"components": [
{
"type": "Input",
"props": {
"type": "text",
"placeholder": "First Name"
},
"style": {}
},
{
"type": "Input",
"props": {
"type": "text",
"placeholder": "Last Name"
},
"style": {
"color": "blue"
}
}
]
}
}
]
}
}
А вот мой шаблон Razor для React:

Код: Выделить всё

@{
var page = @Model.Pages[0];
}

function @page.Name () {
return (




@{
foreach (var Component in @page.Layout.Components) {
if (Component.Type == "Input") {



} else if (Component.Type == "Button") {


@Component.Label


}
}
}




);
}

export default @page.Name;
Проблема:
Я хочу добавить свойство стиля только к вводу Фамилия, а не к Имени вход. Однако Razor заставляет меня добавить атрибут стиля к обоим входным данным, что приводит к включению пустого атрибута стиля для входных данных "Имя".
Если я удалите атрибут style из JSON, Razor выдаст NullReferenceException, как показано ниже.
Код, выдающий ошибку

Код: Выделить всё

"layout": {
"type": "Linear",
"components": [
{
"type": "Input",
"props": {
"type": "text",
"placeholder": "First Name"
},
},
{
"type": "Input",
"props": {
"type": "text",
"placeholder": "Last Name"
},
"style": {
"color": "blue"
}
}
]
}
Изображение

Вопросы:
  • Это задуманное поведение Razor или я делаю что-то не так?
  • Следует ли добавлять условие на странице template.razor перед отрисовкой стиля? Я пробовал несколько способов, например

    Код: Выделить всё

    @if(Component.Style) {}
, но он все равно выдает исключение NullReferenceException при достижении строки Component.Style .

Я использую шаблонизатор Scriban для достижения того же результата, и Scriban достаточно умен, чтобы не применять стиль к входным данным, когда стиль тег отсутствует в JSON. Основываясь на этом опыте, я рассматриваю возможность использования Scriban вместо Razor.

Пожалуйста, дайте мне знать, если я что-то упустил.
Ссылки: Razor Engine, Scriban
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... causing-nu

Вернуться в «C#»