Используйте переменную DataFormatString в asp.net ascx

Итак, у меня есть код, который выглядит так:

<asp:BoundField DataField="CreatedOn" HeaderText="Created on" 
SortExpression="CreatedOn" DataFormatString="{0:MMM dd yyyy hh:mm:ss tt}">

Это работает так, как я хотел бы. Однако я хочу повторно использовать формат даты везде в своей программе. Таким образом, я хочу использовать переменную вместо строки, использованной выше. Что-то типа:

<asp:BoundField DataField="CreatedOn" HeaderText="Created on" 
SortExpression="CreatedOn" DataFormatString="<%=myFormatString%>">

Но это совершенно не работает. Выводит буквально:

<%=myFormatString%>

Пробовал Bind, пробовал Eval, ничего не работает. Мне кажется, это должно быть очень просто, даже необходимо. Я единственный человек в мире, который хочет использовать DataFormatString более одного раза? Это возможно или я мечтатель?


person Andrew    schedule 06.04.2012    source источник
comment
Не могли бы вы опубликовать свою функцию/свойство myFormatString?   -  person Philipp    schedule 07.04.2012
comment
Это просто строка: public static string myFormatString = "{0:MMM dd yyyy}" У меня сложилось впечатление, что если бы ошибка была на той стороне, она бы мне что-то сказала, а не просто распечатала бы текст буквально.   -  person Andrew    schedule 09.04.2012
comment
Я также попробовал это как свойство с get, просто возвращающим строку.   -  person Andrew    schedule 09.04.2012


Ответы (3)


Вы можете установить его из кода:

((BoundField)GridView1.Columns[ColumnIndex]).DataFormatString = myFormatString;
person Tim Schmelter    schedule 06.04.2012
comment
Это действительно работает, если я поместил его в метод DataBound. Я приму это как ответ, если никто не сможет придумать ничего лучше. Просто кажется, что, поскольку у меня есть постоянная строка, я должен иметь возможность подключить ее с помощью ‹%= %›. Если ответ таков, что вы просто не можете этого сделать без видимых причин, то это отстой. - person Andrew; 09.04.2012
comment
Так что, похоже, вы просто не можете этого сделать без видимой причины. Я хотел бы отметить, что мне также пришлось сделать это на Telerik.Web.UI.GridBoundColumn, и это решение даже отличается от этого. Для этого решения мне пришлось сделать это в методе PreRender для элемента управления, а затем вызвать метод blah.MasterTableView.Rebind() (см. Декларативные столбцы здесь - person Andrew; 13.04.2012

Одним из вариантов может быть создание нового класса DateBoundField (или как вы хотите его назвать), который наследует связанное поле. В конструкторе вы просто устанавливаете DataFormatString в свою строку формата даты, затем везде используете DateBoundField для своих дат, когда вам нужно изменить формат даты, просто измените строку формата в конструкторе этого класса .

    public class DateBoundField : BoundField
    {
        public DateBoundField()
        {
             DataFormatString = "{0:yyyy-MMM-dd}";
        }
    }
person cbeuker    schedule 11.07.2013
comment
Я нашел, что это довольно хороший способ. Для тех, кому это нужно, вам нужно будет добавить что-то вроде следующего в верхнюю часть вашего файла .aspx: <%@ Register TagPrefix="x" Namespace="y" Assembly="z" %>, где x — это придуманный тег для использования с элементом управления вместо <asp:, y — это пространство имен, которое содержит ваш новый класс. а z — это имя сборки, содержащей новый класс. - person Craig Silver; 28.11.2018

Думаю, я только что нашел решение, я никогда не использовал его раньше, так что вам нужно попробовать :-)

URL-адрес описания не декодируется asp.net

Я бы попробовал что-то вроде:

<%# myFormatString() %>
person Philipp    schedule 06.04.2012
comment
Отрицательный. Все равно распечатывает буквально. - person Andrew; 09.04.2012
comment
Вы пробовали свойство на другом объекте? например: ‹input type=hidden value=‹%=myFormatString()%› /› У меня есть предположение, что объекты, проверенные на стороне сервера, не принимают встроенный код asp. У меня уже были подобные проблемы в aspx/.net с runat=server. - person Philipp; 09.04.2012
comment
Да, это работает, как и ожидалось, правильно распечатывая строку. Я думаю, это просто какая-то вещь asp.net, где они не хотят, чтобы мне было легко... - person Andrew; 10.04.2012