Повторное использование переменной несколько раз на странице ASP.NET - PullRequest
7 голосов
/ 19 апреля 2010

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

company_name.Text = "Acme Windows";

тогда

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

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

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

Ответы [ 5 ]

11 голосов
/ 19 апреля 2010

Самый простой способ сделать это - создать строковую переменную или свойство в вашем классе code-behind и использовать нотацию <%= %> (сокращение от 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, представляют отдельные части веб-страницы - их нельзя использовать несколько раз на странице, поскольку экземпляр объекта company_name ссылается к определенной части HTML-кода, сгенерированного <asp:literal> на вашей странице .aspx.

3 голосов
/ 19 апреля 2010

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

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

А в aspx:

.NET 4.0:

<%:this.CompanyName%>

До 4.0:

<%=this.companyName%>
1 голос
/ 19 апреля 2010

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

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

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

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

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

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

1 голос
/ 19 апреля 2010

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

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

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

0 голосов
/ 19 апреля 2010

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

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

Создайте свойство в коде позади вещей:

protected CompanyName{get;set;}

Затем, в аспекте aspx, укажите это с помощью команд <% =%>

<span><%=CompanyName %></span>
...