Деревья выражений являются представлением в оперативной памяти выражения, например, арифметическим или булевым выражением. Например, рассмотрите арифметическое выражение
a + b*2
, Так как * имеет более высокий приоритет оператора, чем +, дерево выражений создается как этот:
[+]
/ \
a [*]
/ \
b 2
Наличие этого дерева, это может быть оценено для любых значений a и b. Кроме того, можно преобразовать его в другие деревья выражений, например, для получения выражения.
, Когда Вы реализуете дерево выражений, я предложил бы создать Выражение базового класса . Полученный из этого, класс BinaryExpression использовался бы для всех двоичных выражений, такой как + и *. Тогда Вы могли представить VariableReferenceExpression к ссылочным переменным (таким как a и b), и другой класс ConstantExpression (для 2 от примера).
дерево выражений во многих случаях создается как результат парсинга входа (от пользователя непосредственно, или из файла). Для оценки дерева выражений я предложил бы использовать Шаблон "посетитель" .
Хорошо, я проверил ответ от veggerby , и он отлично работает:
В
section:
<asp:PlaceHolder id="MetaPlaceHolder" runat="server" />
Обратите внимание, что Visual Studio может отображать предупреждение в теге PlaceHolder, поскольку он не распознается как известный элемент внутри заголовка, но вы можете игнорировать это. Это работает.
В коде C #:
HtmlMeta meta = new HtmlMeta();
meta.Name = "robots";
meta.Content = "noindex,follow";
MetaPlaceHolder.Controls.Add(meta);
В качестве альтернативы (поскольку у вас уже есть блоки кода, использующие <%%>
в разделе заголовка), вы можете пометить мета напрямую и получить только значение со стороны сервера:
<meta name="robots" content="<%=GetMetaRobotsValueFromDatabase()%>" />
Или вы можете просто поместить свой метатег в заголовок с идентификатором и runat = "server" ... затем в коде, стоящем за ним, скажем
myMetaTag.Content = "noindex,follow";
или
myMetaTag.Visible = false;
или все, что угодно.
Я не тестировал, но, возможно, вы можете добавить
внутри тега
и добавьте туда метатеги.
Попробуйте переместить все, что вы делаете в <% ....%>, в код программной части. Если вы используете сценарий для добавления содержимого на страницу, вы можете заменить его элементом управления asp: Literal, а затем установить значение, которое вы ранее вычисляли в блоке сценария, для кода программной части и установить Literal.Text на это значение.