2010-04-01 4 views
4

Lorsque je produis code à l'aide des modèles T4 dans Visual Studio 2010, je reçois l'erreur suivante pour chacun de mes contrôles asp quand je tente de compiler:Nouvel attribut "showat" asp requis de manière incohérente dans VS2010. Pourquoi?

Control « ddState » est manquant attribut obligatoire « showat ».

Je n'ai jamais eu cette erreur dans les versions précédentes de .NET. En outre, je ne pas obtenir cette erreur lorsque je construis manuellement mes pages soit par glisser/déposer, ni je l'obtiens quand je tape moi-même le texte de contrôle. Quand je génère du code, je dois ajouter manuellement showat="client" à mon tag pour que le compilateur soit content. Je crois comprendre que je n'ai jamais eu à spécifier explicitement cette étiquette. Les éléments suivants:

<asp:dropdownlist id="ddState" runat="server" showat="client" /> 

résout le problème. Pourquoi dois-je ajouter ceci au code généré mais pas d'autres fois?

(C'est un projet WebForms VS-2010, en utilisant VB, en cas qui fait la différence.)

+8

Personnellement, je pense que ces deux attributs obligatoires sont idiotes. Et devine quoi; ils vont ajouter plus dans la prochaine version! J'ai entendu dire qu'ils prévoient d'ajouter au moins donot = "crash", et peut-être plus. –

+0

Est-ce que VS2010 intelli-sense a des options pour 'showat'? –

+1

@Matti D'accord! 'runat' sur un contrôle ASP est idiot de taper à chaque fois, où d'autre va-t-il s'exécuter? Mais il est très agréable de taguer 'runat = server' sur une table/ligne/cellule HTML normale. –

Répondre

1

Vérifiez que VB ne fait rien dans la page du concepteur de formulaire Web lorsque vous utilisez l'EDI pour ajouter le contrôle. Je ne suis pas sûr comment VB insère l'étiquette implicite.Mais ce serait quelque chose que le modèle T4 manquerait, juste une pensée ...

+0

Par tag implicite, vous voulez dire l'attribut 'showat' * *, n'est-ce pas? –

3

Apparemment 5 .NET ou d'une autre un de ces super service packs va permettre quelque chose appelé ciblée rendu . A l'origine, il était destiné à être utilisé uniquement dans le cadre de Webforms, mais j'ai entendu récemment qu'il y aurait une façon élégante de l'utiliser dans MVC (en utilisant certaines classes auxiliaires) et dans les services utilisant WCF. Cela fonctionnera bien avec les données dynamiques, mais est très lâchement couplé avec cela; vous pouvez utiliser l'un ou l'autre complètement indépendamment. Si vous configurez vos données dynamiques avec certaines balises que vous pouvez l'avoir construit sur le client, etc.

Pour maintenant, il suffit de mettre showat="client" dans tous vos tags, et tout est bon. C'est supposé être le défaut implicite, mais j'ai entendu parler de cas où l'EDI semble l'exiger. Dans le futur, showat="client" sera le réglage le plus sûr de toute façon, donnant le comportement attendu dans 99,9% des cas.

+0

Je pense que c'est ce que je vais finir par faire. En fait, je vais le faire maintenant pour que mes classes se compilent. J'espère toujours que quelqu'un sait pourquoi. Pour l'un, je n'ai jamais pu obtenir une réponse sur pourquoi un * contrôle d'asp * avait besoin de la balise 'runat'. Cela m'a toujours ennuyé. Avoir 'showat' m'énerve. –

2

Ceci est requis dans VB, mais pas C#, ce qui explique pourquoi il ne semble pas nécessaire parfois. Pour être plus précis, le compilateur C# place l'équivalent de showat=client dans l'IL automatiquement, sauf si vous spécifiez un showat cible autre queclient.

+0

Mais quand j'ai construit des pages manuellement, ce n'est pas nécessaire. Peut-être que lorsque vous construisez avec T4 en C#, vous auriez le même problème. Avez-vous essayé cela. –

+0

Non, ce n'est pas le cas, car nous l'avons fait dans ma boutique, en utilisant le T4 dans VS2010 beta. Nous n'avions pas besoin de tags. – kasabb

2

"showat = 'client'" devrait avoir peu d'effet sur votre programmation. Son objectif principal est le futur ciblage de sortie WCF, qu'ils voudront être rétrocompatible. Pour l'instant, la seule valeur possible est "client", mais à l'avenir, il y aura d'autres valeurs possibles qui permettront le pré-rendu des valeurs mises en cache, et apparemment "poussant" la sortie vers les services. L'exemple que j'ai vu au dernier camp de code était où vous pouviez pousser à un service sur (probablement) le même site ainsi que sur la machine client, à des fins de journalisation/débogage. Vous auriez quelque chose comme (pour utiliser votre exemple):

<asp:dropdownlist id="ddlCP" runat="server" showat="client, logService" /> 

. . . et puis le rendu irait à votre fichier journal. Ou, à votre fournisseur de session (si vous avez plusieurs serveurs Web et implémentez un fournisseur de session partagé), etc. Je pense que logService ci-dessus devrait être défini dans le web.config ou quelque chose.

+0

C'est extrêmement cool. Je peux voir comment cela fonctionnerait bien avec les données dynamiques, que j'ai hâte d'utiliser. Mais, sauriez-vous pourquoi le compilateur (le compilateur vb au moins) nécessite une déclaration explicite de l'attribut parfois et pas d'autres fois? –

1

D'accord que mon VS2010 résout ce problème pour vous. Ensuite, vous pouvez supprimer les étiquettes complètement. Je suggère d'obtenir la mise à niveau. C'est bien de travailler le coût de mise à niveau de 599 $. Sinon, regardez pour ajouter le showat = "client" dans toutes les balises. Je pense que Rising Star a eu raison, même si je ne l'ai pas encore testé.

Questions connexes