6
votes

ASP.NET MVC RAZOR EXTRA WHITSPACE RENDÉ

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>
  }
}


2 commentaires

Pourquoi avez-vous un espace après la virgule dans la seconde étiquette?


Dupliqué possible de ASP.NET MVC RAZOR Space supplémentaire


5 Réponses :


1
votes

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 , puis en dehors de la boucle DO @ StringBuilderObject.Tostring () .


5 commentaires

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 est spécifique au rasoir, il est utilisé pour indiquer du texte brut.


Compris, mais il semble que c'est un exemple très simplifié. Si ce n'est pas, à l'aide d'une chaîne serait plus efficace qu'un StringBuilder 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 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 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 + = ?) 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 + = 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.



-3
votes

Je pourrais supposer que ce n'est pas un problème de rasoir, mais plutôt un élément est rendu avec des marges.

  1. Ouvrez Firebug (ou chrome ou autre) et voyez que c'est vraiment un problème de balise.
  2. dans votre fichier CSS essayer d'ajouter

    texte {marge: 0}


1 commentaires

Le code affiché ne rendra aucun sur le navigateur; Ceci est juste utilisé par Razor pour reconnaître les blocs de texte à rendre. Voir l'explication de Scott Gu - weblogs.asp.net/scottgu/archive/2010/12/15/...



9
votes

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)


0 commentaires

0
votes

Le problème est avec la source générée. Lorsque vous regardez la source réelle, vous obtenez:

  1
    , 
  2
    , 
  3


0 commentaires

7
votes

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>}
}


2 commentaires

Pourquoi des caractères après le 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).