Dans ASP.NET MVC, RAZOR insère un espace supplémentaire entre les blocs de texte. Je veux rendre une liste de cette façon: "1, 2, 3" mais obtenez "1, 2, 3".
@for (int i = 1; i < 3; i++) { <text>@i</text> if (i != 2) { <text>, </text> } }
5 Réponses :
au lieu d'écrire des morceaux de texte dans différents endroits chaque fois que chaque fois la boucle, vous pouvez accumuler tout le texte dans un stringbuilder code>, puis en dehors de la boucle DO
@ StringBuilderObject.Tostring () code>. p>
Cela viole tout le point d'utilisation des modèles de page, car il nécessite d'intégrer le HTML dans les littéraux à chaîne. Si vous allez faire cela, pourquoi avoir une vue du tout? Il suffit de générer la page entière dans le contrôleur.
@David, je suis assez nouveau à MVC, mais je ne suis pas sûr de comprendre votre point. Il ne crée aucun HTML, tout simplement texte. L'élément
Compris, mais il semble que c'est un exemple très simplifié. Si ce n'est pas, à l'aide d'une chaîne code> code> serait plus efficace qu'un StringBuilder code> pour un tel bloc. En outre, cela mérite peut-être votre temps de regarder la classe que le temps d'exécution génère de la vue. Il s'occupe de beaucoup de la mémoire tampon que
stringbuilder code> vous donne dans les coulisses.
@David, OK, mais dans la normale .NET, si vous construisez une chaîne une pièce à la fois via une boucle, un stringbuilder code> est généralement un bon moyen de partir. Voulez-vous dire que la manière dont les vues de rasoir sont compilées signifie que suffit d'ajouter à une chaîne (en utilisant
+ = code>?) Est suffisant?
Oui, vous avez raison dans cet établissement une chaîne par une concaténation normale peut être très lente car une copie est créée (ainsi que la collection de déchets associée) avec chaque addition à cordes. Cependant, ce n'est pas la façon dont les points de vue compilés fonctionnent. Je n'utiliserais même pas string + = code> dans ce cas - laissez le rasoir en prendre soin de cela comme s'il le faisait. Garder le code HTML dans la vue et sortir du code compilé, est, à mon avis, requis - je ne devrais pas avoir à apporter des modifications de code lorsqu'un concepteur veut ajouter ou supprimer une virgule.
Je pourrais supposer que ce n'est pas un problème de rasoir, mais plutôt un élément est rendu avec des marges. p>
texte {marge: 0} p> blockQuote>
Le code affiché ne rendra aucun
Je veux rendre une liste de cette façon: "1, 2, 3" p>
rapide et sale: p>
xxx pré> évidemment une aide personnalisée semble plus appropriée au travail de formatage de quelque chose dans la vue: p>
@Html.FormatList(Model.MyList)
Le problème est avec la source générée. Lorsque vous regardez la source réelle, vous obtenez:
1 , 2 , 3
Vous voyez l'espacement supplémentaire entre le nombre et la virgule car votre modèle de rasoir comprend une pause de ligne (qui s'affiche sous forme de blancheur dans le navigateur) entre le nombre et la virgule:
@for (int i = 1; i < 3; i++) { <text>@i</text>if (i != 2){<text>, </text>} }
Pourquoi des caractères après le texte> code> obtiennent la sortie? La rupture de ligne ne devrait-elle pas être considérée comme un code C #?
@Netmage Je ne sais pas le pourquoi ... je partageais mes observations. Je n'utilise plus beaucoup de rasoir, alors pour tout ce que je sais que cela ne peut même pas être le comportement actuel (cette réponse était de près de 7 ans).
Pourquoi avez-vous un espace après la virgule dans la seconde code> étiquette?
Dupliqué possible de ASP.NET MVC RAZOR Space supplémentaire