2009-08-31 4 views
3

Я пытаюсь использовать обнуляемый DateTime и дважды как параметр для actionfilter, но это дает следующее сообщение об ошибке:Asp.net Mvc: Фильтры NULLABLE параметру

'Propertyname' is not a valid named attribute argument because it is not a valid attribute parameter type

Я думал быстрый Google будет решить, но к моему сюрпризу я не мог найти много информации об этом.

Вот код фильтра.

public class AddToSitemap : ActionFilterAttribute 
{ 
    public string Changefreq { get; set; } 
    public DateTime? Lastmod { get; set; } 
    public double? Priority { get; set; } 
} 

Заранее спасибо.

+1

Не должно ли имя класса быть AddToSiteMapAttribute для MVC Framework правильно подобрать атрибут? –

+0

Это действительно хороший вопрос, все примеры, которые я видел, тоже делают. Мой код, похоже, работает, поэтому я не уверен, что обязательно добавить атрибут имени. – Pickels

+0

Это не обязательно, но это общепринятое правило и правило. –

ответ

2

Вот the compiler error on the MSDN.

Вы можете использовать только следующие типы в соответствии с Attributes Tutorial:

Attribute parameters are restricted to constant values of the following types:

- Simple types (bool, byte, char, short, int, long, float, and double) 
- string 
- System.Type 
- enums 
- object (The argument to an attribute parameter of type object must be a constant value of one of the above types.) 
* One-dimensional arrays of any of the above types 

означает, что вы в вашем случае, не может использовать:

  1. Nullable Double.
  2. Nullable DateTime.
  3. Дата Время.

Я бы посоветовал использовать INT или перечисления для приоритета в качестве приоритета не звучит, чтобы быть хорошим кандидатом для неоспоримой Double.

Вы можете обходной способ DateTime, изменив его тип на длинный и присвоив ему Ticks.
Но I сомневается, что C# позволяет назначать непостоянные значения для атрибутов при их применении (и новый DateTime (1234,5,6). Точки не являются константой с этой точки зрения).

+0

отличный ответ! –

0

Я думаю, вам нужно использовать строку вместо и преобразовать его в DateTime в методе действий или ViewModel и т.д.

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