Экранирование встроенных блоков кода в asp.net ?

#c# #asp.net

#c# #asp.net

Вопрос:

На моем веб-сайте есть следующий HTML-код:

 <meta name="keywords" content="<%=Keywords%>"/>
<meta name="description" content="<%=Description%>"/>
  

Это на главной странице моего сайта. В коде для главной страницы у меня есть это:

     private String _description = "A default description for my site";
    public String Description
    {
        get { return _description; }
        set { _description = value; }
    }

    private String _keywords = "my Site my Company keywords ";
    public String Keywords
    {
        get {return _keywords; }
        set { _keywords = value; }
    }
  

Идея заключается в том, что все страницы на моем сайте будут иметь описание / ключевые слова по умолчанию, если только мне не нужно установить для них что-то другое на определенной странице (используя Master.Description = "whatever" ).

Однако у меня возникли некоторые проблемы: открывающая скобка для разделения встроенных блоков кода экранируется в сгенерированном HTML, поэтому блоки кода не работают. Вот выдержка сгенерированного HTML-кода для моей страницы:

 <meta name="keywords" content="amp;<%=Keywords%>" /><meta name="description" content="amp;<%=Description%>" />
  

Я привык использовать C #, но я новичок в asp.net , и я не могу выработать правильный синтаксис, чтобы заставить это работать правильно. Что мне нужно сделать, чтобы встроенные блоки кода работали правильно?

Ответ №1:

Запустите свои элементы управления на стороне сервера и назначьте им значения:

     <meta name="keywords" id="keywords" runat="server" />
    <meta name="description" id="desc" runat="server" />

    keywords.Attributes("content") = Keywords;
    desc.Attributes("content") = Description;
  

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

1. Это сложно с использованием основных страниц, поскольку дочерние страницы не могут видеть ключевые слова и элементы описания. Перенаправление всех изменений в эти элементы через свойства на главной странице позволяет мне легко добавлять префиксы / суффиксы.

2. Вы могли бы поместить код в код главной страницы позади. Код главной страницы, лежащий в основе файла, сможет считывать те же объекты, что и ваш файл разметки главной страницы

3. Они могут, если вы предоставляете строго типизированный доступ к ним

4. Есть ли какая-либо причина эффективности или аналогичная, чтобы сделать это таким образом, а не с помощью свойств? Я мог бы обойти свой вопрос здесь, выполнив get {return """ _description """} , но я хочу знать, как поместить встроенные блоки кода на страницу, подобную этой, без их экранирования.

Ответ №2:

Используйте простое / одинарное выражение привязки.

 <meta name="keywords" content="<%# Keywords%>"/>
<meta name="description" content="<%# Description%>"/>
  

Выдать DataBind() метод в коде-за:

  if(!IsPostBack)
    DataBind();