Биндинг переменных в контрол.

sysaux
Дата: 23.06.2010 22:25:30
Здравствуйте.
Возникла необходимость установить в одно из полей контрола (например, Button) значение из static const этого же класса. Т.е. у меня в описании класса страницы есть код
protected const string BUTTON_SAVE = "buttonSave";
соотвественно, нужно в разметке кнопки подставить эту константу. Пробовал
<asp:button value='<%# this.BUTTON_SAVE %>' />
- не работает, значение value="";
Что я делаю не так?
jekaSQL
Дата: 24.06.2010 08:58:31
Делайте это в обработчике PreRender кнопки.

И, кстати, статичные члены класса через this, кнечно, недоступны.
jekaSQL
Дата: 24.06.2010 09:29:10
Еще вариант, можно вручную вызывать метод DataBind() у кнопки или у страницы.
sysaux
Дата: 24.06.2010 11:47:55
jekaSQL,

Дело в том, что контрол - не совсем Button. Это тулбар, в котором есть Items в виде кнопок. Я понимаю, что подобные контролы можно забиндить на коллеции, но мне нужно именно на приватные переменные.
Т.е. получается - никак?
jekaSQL
Дата: 24.06.2010 12:28:16
почему никак, я же написал.
Вызовите, например, в Page_Load Page.DataBind() и все ваши <%# переменные %> пробиндятся.
Только, я точно не знаю, хорошо ли биндить страницу по таким поводам.
Zoria
Дата: 24.06.2010 13:14:09
а как с <%=переменная%>
jekaSQL
Дата: 24.06.2010 13:47:08
Zoria
а как с <%=переменная%>

если это мне вопрос, то я не знаю. этот ужос остался в обычном асп.
сам я и <%# %> не использую, на всякий случай.
ShSerge
Дата: 24.06.2010 13:54:25
jekaSQL
...этот ужос остался в обычном асп...

Да ну.
jekaSQL
Дата: 24.06.2010 14:02:11
ShSerge
jekaSQL
...этот ужос остался в обычном асп...

Да ну.

Для меня лично :)
Зритель с попкорном 5
Дата: 24.06.2010 14:11:46
Zoria,

<%=переменная%> в runat="server" контроле не сработает

Могу рассказать как я выкручиваюсь в таких ситуациях - не самый очевидный подход, но мне нравится концепция.

где нибудь в App_Code объяви такой класс:
[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
	public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
	{
		return new CodeSnippetExpression(entry.Expression);
	}
}

после этого на страницах можно использовать такой синтаксис, к примеру:
<asp:Button Text="<%$ Code: DateTime.Now %>" runat="server" />
или же в твоём случае
<asp:Button value="<%$ Code: BUTTON_SAVE %>" runat="server" />