2011-11-07 3 views
2

Je suis en train de créer un identifiant pour une entrée en effectuant les opérations suivantesMVC3 numéro de concaténation Razor

id="@ViewData.ModelMetadata.ContainerType.Name + "_" + @ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate")" 

mais il est à venir jusqu'au bout id = « propertyName + ». Comment puis-je concaténer les deux avec un trait de soulignement au milieu dans une vue de rasoir?

Répondre

4

Vous pouvez utiliser la syntaxe @(expression) pour exprimer une expression de code explicite.

Vous devez être explicite ici car l'espace après @ViewData.ModelMetadata.ContainerType.Name n'est pas un caractère valide pour un identifiant C#, donc l'évaluation s'arrête là.

L'algorithme utilisé par Razor pour le traitement de l'expression de code implicite est le suivant:

  1. Parse un identifiant - Dès que nous voyons un caractère non valide dans un C# ou identifiant de VB, nous nous arrêtons et passez à l'étape 2
  2. Vérifier parenthèses - Si nous voyons « (» ou « [ », passez à l'étape 2.1, sinon, passez à l'étape 3
    1. Parse jusqu'à ce que le correspondant. «) » ou « ] » (nous suivons les paires "()" et "[]" imbriquées et ignorons "() []" nous voyons dans les chaînes ou les commentaires)
    2. Retour à l'étape 2
  3. Rechercher un "." - Si nous en voyons un, passez à l'étape 3.1, sinon, N'ACCEPTEZ PAS LE "." comme code, et passez à l'étape 4
    1. Si le caractère APRÈS le "." est un identifiant valide, acceptez le "." et revenez à l'étape 1, sinon, passez à l'étape 4
  4. Terminé!

(Tiré de ScottGu's Blog)

3

Essayez comme ceci:

id="@(ViewData.ModelMetadata.ContainerType.Name)[email protected](ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate"))" 

ou comme ceci:

id="@string.Format("{0}_{1}", ViewData.ModelMetadata.ContainerType.Name, ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate"))" 
+0

aussi une belle une ;-) – DanielB

2
id="@(ViewData.ModelMetadata.ContainerType.Name + "_" + ViewData.TemplateInfo.GetFullHtmlFieldId("FromDate"))"