Происходит то, что ASP.net вызывает Expression Builder . То, что здесь происходит, заключается в том, что компилятор ASP.net вместо перевода вашего:
<asp:AControlWithATextProperty runat="server" Text="Some Text">
до:
AControlWithATextProperty ctl1 = new AControlWithATextProperty();
ctl1.Text = "Some Text";
Когда он преобразует разметку в файле .aspx
в файл .cs
в сочетании с выделенным кодом, он фактически делает что-то похожее на это:
<asp:AControlWithATextProperty runat="server" Text="<%$ Resources:ResourceFile, ResourceName %>">
становится:
AControlWithATextProperty ctl1 = new AControlWithATextProperty();
ctl1.Text = ResourceExpressionBuilder.EvaluateExpression("ResourceFile, Resourcename");
Может показаться, что компилятор asp.net не может обрабатывать конкатенацию содержимого тегов <%$ %>
с любым дополнительным текстом в свойстве разметки. Либо баг, либо по дизайну. то есть вы не получите ctl1.Text = ResourceExpressionBuilder.EvaluateExpression("ResourceFile, Resourcename") + "»"
.
Вы можете узнать больше о ResourceExpressionBuilder в msdn, ExpressionBuilder в целом или, если вы действительно хотите; реализация одного для локализации (база данных поддерживается, отсюда тот факт, что я не использовал ResourceExpressionBuilder) в мой блог (3 части).