2009-08-31 6 views
3

Je suis en train d'utiliser un datetime annulable et double comme paramètre pour un ActionFilter mais il est donne l'erreur suivante:Asp.net Mvc: Filtres paramètre annulable

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

Je pensais un rapide Google résoudrait mais à ma surprise, je ne pouvais pas trouver beaucoup d'informations à ce sujet.

Voici le code de mon filtre.

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

Merci d'avance.

+1

Le nom de la classe ne doit-il pas être AddToSiteMapAttribute pour MVC Framework afin de récupérer l'attribut correctement? –

+0

C'est en fait une bonne question, tous les exemples que j'ai vus le font aussi. Mon code semble fonctionner, donc je ne suis pas sûr s'il est obligatoire d'ajouter un attribut au nom. – Pickels

+0

Ce n'est pas obligatoire mais c'est une règle et une règle acceptées dans le monde entier. –

Répondre

2

est ici the compiler error on the MSDN.

Vous ne pouvez utiliser les types suivants selon 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 

Ce qui signifie que vous dans votre cas qui ne peuvent pas utiliser:

  1. Nullable Double.
  2. Nullable DateTime.
  3. DateHeure.

Je vous conseille d'utiliser int ou énumération pour la priorité que la priorité ne semble pas être un bon candidat pour beeing Double.

Vous pouvez résoudre DateTime en modifiant son type à long et en lui affectant Ticks.
Mais je doute que C# vous permet d'affecter des valeurs non-constantes pour les attributs lors de leur application (et nouveau DateTime (1234,5,6) .Ticks n'est pas une constante de cette perspective).

+0

excellente réponse! –

0

Je pense que vous devez utiliser une chaîne à la place et le convertir en DateTime dans votre méthode d'action ou ViewModel, etc.