2011-06-23 16 views
35

Así que solo tengo algo que ver con la forma en que Visual Studio formatea el código de afeitar. Siempre he tenido algunos problemas con Visual Studio y la forma en que formatea el código de UI, siempre parece hacer un trabajo realmente malo que la industria no quiere seguir.Razor Helper Sintaxis Auto Formateo feo. ¿Como arreglar?

Así que el ejemplo se ve muy estúpido. Y estoy tratando de averiguar si hay modificaciones o formas de solucionar este problema. Simplemente se ve realmente muy mal.

¿Alguien sabe algo al respecto? lol

@using Company.Mobile2.Enums 
@helper BidsByShipment(string generatedId, int bidsCount, int activeBidsCount) 
    { 
     if (bidsCount > 0) 
     { 
    <a class="Company-listview-link Company-listview-bids" href="/Shipping/Bids/ByShipment?id={0}"> 
     @if (activeBidsCount > 0) 
     { 
      <text>@bidsCount (@activeBidsCount @GetStr("Company"))</text> 
     } 
     else 
     { 
      <text>@bidsCount</text> 
     } 
    </a> 
     } 
     else 
     { 
    <text>0 @GetStr("Company")</text> 
     } 
} 
+2

Tengo el mismo problema, y ​​no he encontrado una buena manera de solucionarlo :(A menudo, VS pone un solo espacio delante de mi "{". Definitivamente necesita algo de trabajo :( –

+0

Sí, es un desayuno para perros bien, me vuelve loco también, especialmente porque se ha roto antes ... –

+2

Ojalá VS nos diera la opción de no formatear el código UI en absoluto. – Brian

Respuesta

0

El código de C# forma separadamente del código HTML. Si desea la sangría adecuada, simplemente coloque algunas etiquetas de envoltura inútiles donde sea que espere que haya sangría y obtendrá la sangría. Sin embargo, esto sería un antipatrón.

Aquí está el código. . Para una función como la que ha definido que "no estoy seguro si funciona realmente

@using Company.Mobile2.Enums 
<div> 

@helper BidsByShipment(string generatedId, int bidsCount, int activeBidsCount) 
    { 
     if (bidsCount > 0) 
     { 
     <a class="Company-listview-link Company-listview-bids" href="/Shipping/Bids/ByShipment?id={0}"> 
     @if (activeBidsCount > 0) 
     { 
      <text>@bidsCount (@activeBidsCount @GetStr("Company"))</text> 
     } 
     else 
     { 
      <text>@bidsCount</text> 
     } 
     </a> 
     } 
     else 
     { 
     <text>0 @GetStr("Company")</text> 
     } 
} 
<div> 
+3

No veo cómo incluso eso resolvería el problema. La sangría mala está en html, no en C#. Entonces, ¿cómo se arreglarían las etiquetas de envoltura, las etiquetas contenedoras todavía se sangrarían incorrectamente? Tal vez un pequeño ejemplo ayudaría? – BradLaney

1

¿Tiene Visual Studio configurado para usar sangrías de tabulación? Esto revela un error de formato Razor donde inserta espacios en lugar de pestañas como debería. La solución es cambiar a sangría de espacio.

+0

Uso indentación de espacio. – BradLaney

0

Para todas las personas que hablan sobre Visual Studio, creo que es bastante impresionante que te permita cambiar entre HTML y C# sin b eing le dice qué idioma está usando.

En una nota más práctica, creo que mi consejo sería combinar muchas de las cosas que se muestran arriba. Específicamente ...

  1. Evite usar @: para denotar una cadena literal de HTML. Visual Studio agrega frecuentemente una línea después de formatear el código, e incluso cuando no puede terminar en una recursión infinita, usando @ para volver al código, y así sucesivamente. Use WriteLiteral para las cosas que no están codificadas en etiquetas HTML, tal como se sugirió anteriormente; de lo contrario, Visual Studio detectará HTML cuando use a. Si ...
  2. ... utiliza la fantástica idea de insertar código en un bloque @ {...}.

Teniendo en cuenta estos dos me he dado cuenta que CTRL K, D para formatear código dio un resultado perfecto para un bloque de mesa que ha sido volviendo loco:

<table> 

<tr> 
    <th>Chapter</th> 
    @*<th class="woCoursewareFindTd">Page count</th>*@ 
    <th>Contents</th> 
</tr> 

@{ 
    foreach (var c in Model.Chapters) 
    { 
     if (c.Courseware2Id == c2.Courseware2Id) 
     { 
      <tr> 
       <td> 
        @{ 

         if (c.ChapterFileName.ToString().ToLower() == "none") 
         { 
          WriteLiteral(c.Courseware3Name); 
         } 
         else 
         { 
          <a href="@c.Href">@c.Courseware3Name (click to download)</a> 
         } 
        } 
        <p>(@c.PageCount [email protected](c.PageCount == 1 ? "" : "s"))</p> 
       </td> 

       <td> 
        @Html.Raw(c.SectionText) 
       </td> 
      </tr> 
     } 
    } 
} 

perfecto! Gracias a todos los colaboradores de StackOverflow anteriores.

Cuestiones relacionadas