Имя ' ' не существует в текущем контексте после попытки доступа к общедоступной переменной из кода в метатегах aspx

Обратите внимание, что эта ошибка появляется не локально на моем компьютере, а только после того, как я опубликовал свои веб-формы.

1. Я пытаюсь создать твиттер-карточки в своей веб-форме, поэтому я использую для этого метатеги.
2- Я объявил некоторые переменные как общедоступную строку в коде страницы aspx.
3- Я добавил метатеги на страницу aspx, и когда я попытался получить доступ к этим переменным, используя пример: ‹%=title%›
4- появилась эта ошибка: Имя «название» не существует в текущем контексте.
Может кто-нибудь сказать мне, что происходит не так›
Код программной части:

        public string title="",desc="",img="",url="";
        protected void Page_Load(object sender, EventArgs e)
        {
            constr = ConfigurationManager.ConnectionStrings["connectionString"].ToString();
            conx = new SqlConnection(constr);
            string id = Request.QueryString["id"];
            if (!IsPostBack)
            {
                url = HttpContext.Current.Request.Url.AbsoluteUri;
                FillData(id);
                Page.DataBind();
            }
        }

        protected void FillData(string id)
        {
            try
            {
                conx.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "selectListArticle";
                cmd.Parameters.AddWithValue("@Id", Convert.ToInt32(id));
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = conx;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                if (dt.Rows.Count > 0)
                {
                    title = dt.Rows[0][1].ToString();
                    lblTitle.Text = title;
                    lblDate.Text = dt.Rows[0][2].ToString();
                    desc = dt.Rows[0][5].ToString();
                    lblIntro.Text = desc;
                    img = "~" + dt.Rows[0][6].ToString();
                    Image1.ImageUrl = img;
                    Image1.AlternateText = dt.Rows[0][8].ToString();
                    string tags = dt.Rows[0][4].ToString();
                    bindTags(tags);
                }
            }
            finally
            {
                conx.Close();
            }
        }

А это страница Aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Article.aspx.cs" Inherits="CosmOnList.Article" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <meta name="twitter:card" content="summary_large_image"/>
    <meta name="twitter:site" content="@Name"/>
    <meta name="twitter:creator" content="@Name"/>
    <meta name="twitter:title" content="<%= title %>"/>
    <meta name="twitter:description" content="<%= desc %>"/>
    <meta name="twitter:image" content="<%= img %>"/>
</asp:Content>

person T.E.A    schedule 10.01.2021    source источник
comment
Помимо вашей проблемы: НЕ кешируйте объекты подключения, обязательно удаляйте их, а также команду и адаптер с блоками using   -  person Charlieface    schedule 10.01.2021
comment
@Charlieface Спасибо за заметку, сойдет. Я только что проверил это.   -  person T.E.A    schedule 10.01.2021
comment
Измените public title= на общедоступную строку title {get; набор;}   -  person Serge    schedule 10.01.2021
comment
@Сергей Все еще показывает ту же ошибку.   -  person T.E.A    schedule 10.01.2021
comment
вы пытались изменить его, например, на twTitle? или поставить после desc в представлении?   -  person Serge    schedule 10.01.2021
comment
@Сергей Изменение не сработало, что ты имеешь в виду, я должен делать с представлениями?   -  person T.E.A    schedule 10.01.2021
comment
Я думаю, что общая привязка данных не работает. Попробуйте ввести просто текст вместо ‹%. Я уверен, что это будет работать.   -  person Serge    schedule 10.01.2021
comment
@Sergey Ну да, это работает, но я не хочу, чтобы данные были статическими.   -  person T.E.A    schedule 10.01.2021
comment
Вы видите runat=server в теге содержимого? Это означает, что на сервере можно манипулировать только тегом контента. Метатегов нет, так как у них нет runat. И, кстати, они должны быть в шапке раздела. Вы должны найти, есть ли способ изменить содержимое метатегов. Возможно Javascript сработает, попробуйте погуглить.   -  person Serge    schedule 10.01.2021


Ответы (1)


Пример использования события Page_Load.

Используйте код привязки данных во встроенном коде (<%#).

aspx:

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
    <meta name="twitter:title" content="<%# title %>" />
</asp:Content>

Код программной части:

public string title = "";

protected void Page_Load(object sender, EventArgs e)
{
    title = "the title";
    Page.Header.DataBind();    // <-- the key is this line.
}
person wazz    schedule 11.01.2021
comment
к сожалению, это продолжало показывать ту же ошибку. - person T.E.A; 15.01.2021