2010-03-17 5 views
3

J'utilise ASP.NET MVC RC2. J'ai un ensemble de classes qui ont été générées automatiquement "Linq-to-SQL Classes", où chaque classe modélise une table dans ma base de données. J'ai des vues "d'édition" par défaut qui utilisent l'extension d'assistance neat-o Html.TextBoxFor pour rendre les champs d'entrée HTML pour les colonnes d'une table.Comment régler automatiquement MAXLENGTH sur les champs de saisie?

Cependant, je remarque qu'il n'y a pas d'attribut MAXLENGTH spécifié dans le code HTML généré. Un rapide google montre que vous pouvez ajouter des attributs explicites en utilisant TextBoxFor etc. mais cela signifierait que j'ai besoin de coder en dur les valeurs (et je dois me rappeler de le faire pour chaque entrée).

Cela semble assez médiocre, étant donné que tout a été généré automatiquement à partir de la base de données, de sorte que la taille des colonnes est connue. (Bien que, pour être juste, les choses du côté Web doivent fonctionner avec tous les objets du modèle, pas seulement avec les objets Linq-to-SQL).

Y a-t-il une bonne façon de faire ce qu'il faut faire?

+0

connexes: http://stackoverflow.com/questions/2386365/maxlength-attribute-of-a-text-box-from-the-dataannotations-stringlength-in-mvc2 –

Répondre

3

Je ne m'inquiéterais pas d'un attribut de longueur maximale sur vos éléments html, c'est un faux sentiment de sécurité.

Ce que je voudrais faire est d'ajouter un attribut StringLength aux champs pour lesquels vous avez besoin d'une validation de longueur maximale. Cela vous fournira automatiquement la validation côté serveur de la longueur et vous fournira également la validation côté client de la longueur si vous le souhaitez.

Si vous avez besoin de plus d'informations sur la nouvelle utilisation par ASP.NET MVC 2 des attributs de validation des annotations de données, lisez la section blog post by Scott Gu.

De même, vous devrez peut-être utiliser des classes buddy pour vos classes Linq to SQL générées ... dans ce cas, vous pouvez lire un blog post I wrote about it.

HTHS,
Charles

+0

Merci, ce message Gu est utile. Il est toujours très décevant, cependant, que je devrais prendre la peine de créer non seulement la classe de copain mais en spécifiant explicitement toutes les longueurs de champ. Le générateur "Classes Linq-to-SQL" connaissait toutes ces informations lors de l'examen de ma base de données. Pourquoi n'a-t-il pas ajouté ces attributs à la classe générée? Avoir à répéter ce genre de choses est * pas * SEC! (Pas ta faute, je sais). –

+8

Digression: Je ne suis pas d'accord sur le fait que MAXLENGTH sur les éléments HTML ne vaut pas la peine - cela n'aide pas à la sécurité, mais au moins ça aide l'utilisateur à ne pas taper 2 pages seulement pour lui dire qu'il n'a que 10 caractères ... –

+0

Point pris. Personnellement, j'utilise la validation côté client pour ce qui prend soin de l'utilisateur de trouver plus tard et aide également à ne pas dupliquer la logique. Mais avec JS désactivé MAXLENGTH ferait ce travail avant d'avoir le serveur. – Charlino

-1

Charles, j'ai eu le même problème et élaboré la solution ce matin. Here's the blog post with the source code.

+2

Même si à mon humble avis, il n'y a rien de mal intrinsèquement lié à un article de blog auto-écrit, pourquoi ne pas inclure le contenu dans votre réponse ici? (en indiquant peut-être "tel que décrit sur mon blog" avec le lien) La longueur de votre article de blog n'est pas si importante qu'elle ne pourrait pas être incluse dans cette réponse et elle garderait tout bien joignable. – Bart

Questions connexes