Снова используйте переменную многократно на странице ASP.NET

Я чувствую себя несколько глупым, задавая такой простой вопрос, но я, может казаться, не нахожу ответ. Я плохо знаком с ASP.NET (C#), но я учусь путем создания простого набора веб-страниц, которые отображают отчет. У меня есть переменная, которая представляет название компании. Я должен произвести эту переменную в нескольких местах на веб-странице. Единственным путем я нашел для вывода переменной, с которой это:

company_name.Text = "Acme Windows";

затем

<asp:literal id="company_name" runat="server" />

Моя проблема состоит в том, что я хочу использовать company_name в нескольких местах на странице. Я должен действительно создать отдельную переменную, содержащую то же значение в течение каждого раза, когда оно помещается на странице? Если я просто копирую вышеупомянутый код XML во все места, я хочу показать переменную, это, очевидно, создает ошибку компиляции, так как тот идентификатор уже определяется.

Я чувствую, что пропускаю что-то очень очевидное.

8
задан 2 revs, 2 users 100% 27 October 2011 в 23:52
поделиться

5 ответов

Самый простой способ сделать это - создать строковую переменную или свойство в вашем классе кода программной части и использовать нотация <% =%> (сокращение от 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.

11
ответ дан 5 December 2019 в 10:40
поделиться

Почему это вики сообщества?

В любом случае, у вас есть несколько возможностей достичь того, чего вы хотите. Размещение нескольких переменных с одинаковыми именами - это определенно не лучшая практика. Если оно у вас заполнено, назовем его «полудинамическим» значением, я бы не стал жестко закодировать его в вашем коде. Я бы использовал глобальный файл ресурсов.

Вы создаете новый файл ресурсов в папке App_GlobalResources и добавляете ключ «COMPANY_NAME» со значением «Acme Windows». Затем в своем коде ASPX вы можете сделать что-то вроде

<asp:literal id="company_name" runat="server" Text="<%$ Resources:GlobalResources, Button_Save %>"/>

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

Если вы хотите продолжить «рефакторинг», то - при условии, что у вас есть некоторая общая информация о компании, которую нужно отображать на разных позициях на странице - вы можете создать отдельный UserControl, который содержит такую ​​информацию, как название компании, номер телефона, контактная информация. и т.д. Внутри этого элемента управления у вас есть литерал, метка, все, что вы используете для отображения этой информации ровно 1 раз. Этот UserControl затем помещается в те места на реальной странице, где он вам нужен, даже несколько раз.

1
ответ дан 5 December 2019 в 10:40
поделиться

Самый простой ответ - вам нужно определить несколько элементов управления.

Но лучшим решением было бы сделать следующее:

Создайте свойство в коде за стороной вещей:

protected CompanyName{get;set;}

Затем на стороне aspx сделайте ссылку на это с помощью <% =% > команды

<span><%=CompanyName %></span>
0
ответ дан 5 December 2019 в 10:40
поделиться

Вы можете добавить элемент управления динамически:

Literal myLiteral = new Literal();
myLiteral.text = "Acme Windows";
this.Page.Controls.Add(myLiteral);

Вы также можете добавить элемент управления в конкретный элемент управления на странице, изменив this.Page.Ссылка Controls на конкретный элемент управления, к которому вы хотите добавить литерал.

1
ответ дан 5 December 2019 в 10:40
поделиться

В этом случае вы создаете свойство на странице и выводите его везде, где вам нужно.

public string CompanyName { get { return "Acme Windows"; } }

И в aspx:

.NET 4.0:

<%:this.CompanyName%>

До 4.0:

<%=this.companyName%>
3
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: