Я чувствую себя несколько глупым, задавая такой простой вопрос, но я, может казаться, не нахожу ответ. Я плохо знаком с ASP.NET (C#), но я учусь путем создания простого набора веб-страниц, которые отображают отчет. У меня есть переменная, которая представляет название компании. Я должен произвести эту переменную в нескольких местах на веб-странице. Единственным путем я нашел для вывода переменной, с которой это:
company_name.Text = "Acme Windows";
затем
<asp:literal id="company_name" runat="server" />
Моя проблема состоит в том, что я хочу использовать company_name в нескольких местах на странице. Я должен действительно создать отдельную переменную, содержащую то же значение в течение каждого раза, когда оно помещается на странице? Если я просто копирую вышеупомянутый код XML во все места, я хочу показать переменную, это, очевидно, создает ошибку компиляции, так как тот идентификатор уже определяется.
Я чувствую, что пропускаю что-то очень очевидное.
Самый простой способ сделать это - создать строковую переменную или свойство в вашем классе кода программной части и использовать нотация <% =%>
(сокращение от Response.Write
), чтобы отображать ее на вашей странице встроенной:
// You can do this anywhere on your .aspx, as many times as you like.
<%= this.CompanyName %>
// Better yet, html encode the value to protect against various threats,
// such as cross-site script injection (XSS)
<%= HttpUtility.HtmlEncode(this.CompanyName) %>
.NET 4.0 вводит новую сокращенную нотацию ( Html Блоки кодирования ) для html-кодирования вашего вывода:
<%: this.CompanyName %>
Что касается вашего исходного подхода, веб-элементы управления ASP.NET, такие как Literal
, представляют отдельные части веб-страницы - вы не можете использовать их несколько раз на странице, потому что экземпляр объекта имя_компании
относится к определенной части HTML, сгенерированной
на вашей странице .aspx.
Почему это вики сообщества?
В любом случае, у вас есть несколько возможностей достичь того, чего вы хотите. Размещение нескольких переменных с одинаковыми именами - это определенно не лучшая практика. Если оно у вас заполнено, назовем его «полудинамическим» значением, я бы не стал жестко закодировать его в вашем коде. Я бы использовал глобальный файл ресурсов.
Вы создаете новый файл ресурсов в папке App_GlobalResources и добавляете ключ «COMPANY_NAME» со значением «Acme Windows». Затем в своем коде ASPX вы можете сделать что-то вроде
<asp:literal id="company_name" runat="server" Text="<%$ Resources:GlobalResources, Button_Save %>"/>
. Некоторое время назад я написал сообщение в блоге , в котором подробно описывается этот подход. Преимущество файла ресурсов в том, что вам не нужно трогать код.
Если вы хотите продолжить «рефакторинг», то - при условии, что у вас есть некоторая общая информация о компании, которую нужно отображать на разных позициях на странице - вы можете создать отдельный UserControl, который содержит такую информацию, как название компании, номер телефона, контактная информация. и т.д. Внутри этого элемента управления у вас есть литерал, метка, все, что вы используете для отображения этой информации ровно 1 раз. Этот UserControl затем помещается в те места на реальной странице, где он вам нужен, даже несколько раз.
Самый простой ответ - вам нужно определить несколько элементов управления.
Но лучшим решением было бы сделать следующее:
Создайте свойство в коде за стороной вещей:
protected CompanyName{get;set;}
Затем на стороне aspx сделайте ссылку на это с помощью <% =% > команды
<span><%=CompanyName %></span>
Вы можете добавить элемент управления динамически:
Literal myLiteral = new Literal();
myLiteral.text = "Acme Windows";
this.Page.Controls.Add(myLiteral);
Вы также можете добавить элемент управления в конкретный элемент управления на странице, изменив this.Page.Ссылка Controls на конкретный элемент управления, к которому вы хотите добавить литерал.
В этом случае вы создаете свойство на странице и выводите его везде, где вам нужно.
public string CompanyName { get { return "Acme Windows"; } }
И в aspx:
.NET 4.0:
<%:this.CompanyName%>
До 4.0:
<%=this.companyName%>