jaket-cp Ответов: 1

Как предотвратить рендеринг/отображение значения razor на стороне клиента


У меня есть словарь, который заполнен данными пары ключ / значение.

Когда ключ найден в словаре, отображается соответствующее значение.
В свою очередь, элемент словаря удаляется.
Но когда он удаляется, возврат True или False выводится на клиентскую сторону.

Вот сокращенная версия кода, используемого для представления проблемы:
@{
	Dictionary<String, String> KeyValuePairList = new Dictionary<String, String>();
	KeyValuePairList.Add("Key01", "Value01");
	String TempValue = "";
}
<div>
	@if (KeyValuePairList.TryGetValue("Key01", out TempValue)) {
		@TempValue
		@KeyValuePairList.Remove("Key01")
	}
	else {
		@:Value0001
	}
</div>

Вот сгенерированный HTML:
<div>Value01True</div>


Что я уже пробовал:

Вот некоторые из способов, которые я пробовал.
@if...
	@(KeyValuePairList.Remove("Key01"))
...

OR

@{
...
	bool TempBool = false;
}
...
@if...
	@(TempBool = KeyValuePairList.Remove("Key01"))
...

Тот же рендеринг:
<div>Value01True</div>


@if...
	if (@KeyValuePairList.Remove("Key01")) { }
OR
	@(KeyValuePairList.Remove("Key01")?"":"")
...

Желаемый рендеринг, но с использованием дополнительного оператора if:
<div>Value01</div>


@if...
	<!--@KeyValuePairList.Remove("Key01")-->
...

Генерируется html с комментарием True, но не отображается в окончательном представлении браузера:
<div>Value01<!--True--></div>


Теперь вопрос в том, как остановить вывод возвращаемого значения в окончательный HTML-код.
Есть ли стандартный способ / лучший практический способ сделать это?
Если вы можете указать мне исходный материал или решение, это было бы здорово.

1 Ответов

Рейтинг:
12

F-ES Sitecore

@if (KeyValuePairList.TryGetValue("Key01", out TempValue)) {
    @TempValue
    @KeyValuePairList.Remove("Key01")
}
else {
    @:Value0001
}

"@"Означает визуализацию выходных данных, поэтому вы визуализируете выходные данные KeyValuePairList.Remove, который возвращает True, если что-то было удалено, так что именно оттуда исходит ваше "True". Вместо этого вы хотите просто запустить код и не визуализировать вывод

@if (KeyValuePairList.TryGetValue("Key01", out TempValue)) {
    @TempValue
    KeyValuePairList.Remove("Key01");
}
else {
    @:Value0001
}


jaket-cp

спасибо - я чувствую себя полным идиотом :)