Статические переменные как заголовок TemplateFields в представлении grdiv asp.net
У меня есть приложение asp.net, где у меня есть редактируемый вид сетки с опциями редактирования, удаления, добавления. эта сетка имеет как обычно поля шаблона. У меня также есть статический класс, который имеет статические строковые переменные. Я хочу сохранить значение этих статических переменных как текст заголовка поля шаблона. Итак, я импортировал пространство имен моего постоянного класса:
<%@ Import Namespace="ConstantManagerNamespace" %>
Затем я попробовал для того же столбца:
1. <asp:TemplateField HeaderText=<%=ConstantManager.Name%>>
2. <asp:TemplateField HeaderText='<%=ConstantManager.Name%>'>
3. <asp:TemplateField HeaderText=<% ConstantManager.Name %>>
4. <asp:TemplateField HeaderText='<% ConstantManager.Name%>'>
all probable syntax to access my constant variable value but
Я получил ошибку парсера:
Literal content ('<asp:TemplateField HeaderText=') is not allowed within a 'System.Web.UI.WebControls.DataControlFieldCollection'.
как это сделать?
2 ответа
Лучше связывать переменные статического класса в событии GridView RowDataBound,
проверьте тип строки заголовок т.е.
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Text = ConstantManager.Name;
}
Проблема возникает из-за того, что вы пытаетесь встроить серверный элемент управления / значение в другой серверный элемент управления. Это не возможно напрямую в asp.net, если вы не используете привязку данных или построитель пользовательских выражений.
Для вашей конкретной ситуации вам нужно создать пользовательский конструктор выражений, который возвращает значение из вашего статического класса.
Конечный результат должен выглядеть примерно так:
<asp:TemplateField HeaderText="<$ ConstantManager:Name >">
Что абсолютно разрешено в aspx файле, если вы определили конструктор пользовательских выражений с помощью "ConstantManager"
префикс.
Фактический пример создания построителя пользовательских выражений можно найти здесь: ExpressionBuilder Class.
ДОПОЛНЕНИЕ:
Кроме того, я думаю, что привязка данных также будет работать, но мне кажется, что это не точное решение для такой ситуации.
Просто используйте этот синтаксис в разметке aspx:
<asp:TemplateField HeaderText="<# ConstantManager.Name >">
И, при загрузке страницы, позвоните:
protected void Page_Load(object sender, System.EventArgs e)
{
this.DataBind();
}
Лично мне не нравится это решение из-за Page_Load
часть. В любом случае, для этого не нужно ничего специально объявлять / кодировать по сравнению с пользовательскими выражениями.
Надеюсь, это поможет!