Как использовать константу C # на странице ASP.Net? - PullRequest
13 голосов
/ 27 сентября 2010

Примеры, приведенные ниже, могут иметь мало смысла, но это потому, что я сосредотачиваюсь на синтаксисе.

Допустим, у меня есть такой код C #:

public static class Foo
{
  public const string Bar = "hello world.";
}

Теперь я хотел быиспользовать константу Foo.Bar в ASP.Net вместо того, чтобы каждый раз вводить «hello world».Поэтому я использовал этот синтаксис:

<p><%= Foo.Bar %></p>

Это работает.Он также работает в таких случаях:

<p>"<%= Foo.Bar %>"</p>

<p class="<%= Foo.Bar %>">the weird, nonsense example</p>  

Так что он работает и с кавычками.Однако у меня есть также случаи, когда кавычки получают более высокий приоритет:

<custom:Header runat='server' Text="<%= Foo.Bar %>"/>

(заголовок - это пользовательский элемент управления - он просто добавляет немного CSS по умолчанию и позиции).В этом случае кавычки имеют более высокий приоритет, и весь текст высасывается как есть, по сути, я получаю заголовок с текстом

<% = Foo.Bar%>

Итак, мой вопрос -- Каков синтаксис для получения значения константы C #, независимо от того, что (IOW - с наивысшим приоритетом)?

Правки:

<custom:Header runat='server' Text="<%# Foo.Bar %>"/>

(примечаниехэш вместо знака равенства) тоже не работает.

Ответы [ 6 ]

2 голосов
/ 27 сентября 2010

Вы можете использовать выражения привязки данных на своей странице, пока страница привязана к данным. Вы все еще можете использовать свой пример:

<custom:Header runat='server' Text="<%# Foo.Bar %>"/>

Но вам также нужно убедиться, что вы вызываете DataBind() в своем коде, чтобы связать все выражения на вашей странице, находящиеся вне элемента управления привязкой данных.

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}
2 голосов
/ 27 сентября 2010

Старайтесь избегать кода на C #, кроме как в коде позади. Лучше поместить элемент управления label на страницу aspx и установить его текстовое свойство с помощью Foo.Bar

myLabel.Text = Foo.Bar;

Тогда у вас есть весь код на стороне сервера в коде, он намного чище и читаем для других.

1 голос
/ 02 сентября 2011

Для пользовательского элемента управления это будет работать, как описано выше, при условии, что ваш элемент управления вызывает DataBind() внутренне (например, в WebControl.Render и т. Д.)

0 голосов
/ 10 июля 2013

Простые кавычки должны делать свое дело

Text='<%= Foo.Bar %>'

или (в зависимости от вашего сценария)

Text='<%# Foo.Bar %>'
0 голосов
/ 27 сентября 2010

afaik значение в <% = используется на этапе рендеринга жизненного цикла страницы </p>

элементам управления нужны эти значения в начале жизненного цикла. Использование <% # произойдет во время привязки данных. </p>

Другой вариант - просто установить его на Page_Load. Это способ его использования в обычном asp.net. В качестве альтернативы вы можете установить его еще раньше / во время инициализации (делайте, если вы не манипулируете им).

0 голосов
/ 27 сентября 2010

Вам необходимо импортировать пространство имен на странице asp.net <% import namespace = "namespace.of.foo.class"%>

Ой, извините, вы не можете использовать синтаксис <% = всерверные элементы управления.В случае серверных элементов управления вам необходимо назначить его в коде.И не имеет значения, является ли оно постоянным или просто свойством класса страницы.</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...