2015-05-15 1 views
0

В моем приложении MVC У меня есть много свойств DateTime типа данных и определяет DataFormatString на каждой новой собственности в этом типе данных определяются, как показано ниже:Используя константу для определения формата свойства в MVC

Модель:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public DateTime StartDate{ get; set; } 


[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public DateTime EndDate{ get; set; } 

Вместо этого, я думаю, есть еще одна возможность определить эти DataFormatStrings только для одного места и сразу, создав новый класс, содержащий постоянное значение или используя веб-конфигурацию и т. Д. Итак, в этом случае, что является лучшим способ использования const ant, т. е. формат даты и т. д. Я использую строку globalization на моем web.config, но я не уверен, что определяю дату DataFormatStrings в web.config. Любая помощь будет оценена по достоинству.

ответ

1

Существует ограничение, с которым вы сталкиваетесь здесь - параметры атрибута могут быть только компиляционными. Из-за этого у вас есть два варианта:

  1. Просто определить константу и использовать ее во всех моделях, как этот

    private const string DateFormat = "{0:dd/MM/yyyy}"; 
    
    [DisplayFormat(DataFormatString = DateFormat, ApplyFormatInEditMode = true)] 
    
  2. Определение формата в web.config и создать свой собственный атрибут, возможно, наследуя от DisplayFormat, который перейдет на web.config для извлечения необходимых данных. Должно быть очень просто - вам просто нужен другой конструктор, который получит параметр param из web.config. Нечто подобное:

    public class WebConfigDateDisplayFormatAttribute : DisplayFormatAttribute 
    { 
        public WebConfigDateDisplayFormatAttribute() 
        { 
         DataFormat = System.Configuration.ConfigurationManager.AppSettings["DateFormat"]; 
        } 
    } 
    
+0

Спасибо за помощь и информацию. Я думаю, что первый способ для меня лучше, но я также хочу использовать этот формат для других свойств в других моделях (в другом файле класса). Итак, что мне делать в этом случае? Создать новый файл класса для определения постоянных значений? Или это невозможно? –

+0

Вы можете объявить свой постоянный публичный или внутренний, который сделает его доступным для других классов. И да, вы можете даже иметь выделенный класс для хранения всех своих констант. – Andrei

+0

Я вижу другой подход (ответ jim tollan) на этой странице: http://stackoverflow.com/questions/4433058/global-constants-in-separate -file-is-it-a-good-idea Могу ли я применить ваш ответ как это? –

4

я выбрал бы для пользовательского атрибута

public class ShortDateFormatAttribute : DisplayFormatAttribute 
{ 
    public ShortDateFormatAttribute() 
    { 
     DateFormat = "{0:dd/MM/yyyy}"; 
     ApplyFormatInEditMode = true; 
    } 
} 
.... 
[ShortDateFormat] 
public DateTime StartDate { get; set; } 
[ShortDateFormat] 
public DateTime EndDate { get; set; } 
+0

Спасибо за помощь. Я также хочу использовать этот формат для других свойств в других моделях (в другом файле класса). Итак, что мне делать в этом случае? Создать новый файл класса для определения постоянных значений? –

+0

@ H.Johnson, то вы повторно используете тот же атрибут, вот в чем смысл. Атрибуты не относятся к одной модели, которую они могут использовать повторно. – James

+0

Ах, извините, я пропустил мысль о том, что вы определяете собственное свойство. Я попробую и дам вам знать. Еще раз спасибо. –

Смежные вопросы