Как использовать константу С# на странице ASP.Net?
Приведенные ниже примеры могут иметь мало смысла, но это потому, что я фокусируюсь на синтаксисе.
Скажем, у меня такой код С#:
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 %>"/>
(header - это настраиваемый элемент управления - он просто добавляет некоторые CSS по умолчанию и положению). В этом случае кавычки имеют более высокий приоритет, а весь текст всасывается как есть, по сути я получаю заголовок с текстом
<% = Foo.Bar% >
Итак, мой вопрос - , что такое синтаксис для получения значения константы С#, независимо от того, что (IOW - с наивысшим приоритетом)?
редактирует:
<custom:Header runat='server' Text="<%# Foo.Bar %>"/>
(отметить хэш вместо знака равенства) тоже не работает.
Ответы
Ответ 1
Старайтесь избегать использования кода С#, отличного от кода.
Лучше установите элемент управления меткой на странице aspx и установите для него свойство text с помощью Foo.Bar
myLabel.Text = Foo.Bar;
После этого у вас есть код на стороне сервера в коде, он намного чище и доступен для других.
Ответ 2
Вы можете использовать выражения привязки данных на своей странице, пока страница привязана к базе данных. Вы все равно можете использовать свой пример:
<custom:Header runat='server' Text="<%# Foo.Bar %>"/>
Но вам также нужно убедиться, что вы вызываете DataBind()
в свой код позади, чтобы привязать все выражения на своей странице, которые находятся за пределами элемента управления привязкой данных.
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
Ответ 3
Для настраиваемого элемента управления это будет работать, как описано выше, если ваш контроль вызывает DataBind()
внутренне (например, в WebControl.Render
и т.д.)
Ответ 4
Вам нужно импортировать пространство имен на странице asp.net
<% import namespace = "namespace.of.foo.class" % >
К сожалению, вы не можете использовать <% = синтаксис в элементах управления сервером. В случае серверных элементов управления вам необходимо назначить его в коде.
И не имеет значения, является ли оно постоянным или просто свойством класса страницы.
Ответ 5
afaik значение в <% = используется во время этапа рендеринга жизненного цикла страницы
элементам управления нужны эти значения ранее в жизненном цикле. Использование <% # будет происходить во время привязки данных.
Другой вариант - просто установить его на странице_Load. Его способ, которым он должен использоваться в обычном asp.net. В качестве альтернативы вы можете установить его еще раньше/во время init (если вы не манипулируете им).
Ответ 6
Простые кавычки должны делать трюк
Text='<%= Foo.Bar %>'
или (в зависимости от вашего сценария)
Text='<%# Foo.Bar %>'