2012-08-02 12 views
14

Necesito cambiar la clase CSS de la etiqueta <div> con la clase 'forumChild'. Tiene que cambiar cada 3 bucles del bucle foreach.Cambiar condicionalmente la clase CSS en la vista Razor

¿Hay alguna manera de hacerlo desde dentro del control?

<div class="Forum"> 
    <p>The Forum</p> 

      @foreach (var item in Model) 
      {    
       <div class="ForumChild"> 

        <img src="@item.Blog.Image.img_path" alt="Not Found" /> 

        <br /> 
          @foreach (var comment in item.Blog.comment) 
          { 

           var db = new ACapture.Models.ACaptureDB(); 

           var Name = from p in db.Profile.AsEnumerable() 
              where (p.AccountID == comment.AccountID) 
              select p;        
          <section> 
            <div> 
             <a href="@Url.Action("Index", "Home")">@foreach (var y in Name) 
                       { @(y.FirstName + " " + y.LastName + ":"); 
                       }</a> 
            </div> 
            <div> 
             @comment.Commentation 
            </div> 
          </section> 
          } 
       </div>     
      } 
</div> 

Gracias de antemano

Respuesta

36
@{ 
    int counter=0; 
} 
@foreach (var item in Model) 
{ 
    counter++; 
    <div class="@(counter<=3 ? "classRed":"classBlue")"> 
     <img src="@item.Blog.Image.img_path" alt="Not Found" /> 
     //other markup also here 

    </div> 
    if (counter == 6) 
    { 
     counter = 0; 
    } 

} 

Dónde classRed y classBlue son las clases CSS

+0

si tengo varias llamadas menos 2, ¿qué puedo hacer aquí? –

4

cómo manejar este problema:

1) es necesario crear método de ayuda que devolverá clase CSS por algún código.

string GetDivClass(int code) 
{ 
    var classes = new [] {"first", "second", "third"}; 
    return classes[code]; 
} 

2) crear contador/índice e incrementarlo en el bucle cada vez.

3) invocar método de ayuda como GetDivClass(index % 3) en el elemento div.

PS

Es solamente POC, por lo que no lo use en una aplicación real (es necesario agregar una lógica de validación y el movimiento de inicialización 'clases' a otro lugar).

+2

con su ejemplo, podría ser mejor para hacer la operación de módulo dentro de la función . De esta forma, la persona que llama no necesita saber cuántos elementos tiene, y también podría agregar más artículos en el futuro sin romper el código existente. – Matthew

+0

Una buena observación, pero será difícil de entender en el diseño lo que este método devuelve en realidad. Tal vez sea mejor agregar algún tipo de nombre de grupo de clase css al método (GetDivClass (cadena cssClassesGroup, código int). ). – user854301

2

Puede escribir ningún código te gusta en una vista de la maquinilla de afeitar, por lo que para hacer lo que está pensando, usted podría hacer algo como esto (me he dejado la mayor parte del material interno):

@{ 
    var className = "ForumChild"; 
} 
<div> 
    @for (int i = 0; i < Model.Count; i++) 
    { 
     var item = Model[i]; 
     if (i % 3 == 0) 
      className = GetNewClassName(); // Or whatever 
     <div class="@className"> 
     </div> 
    } 
</div> 
-1

Puede agregar una variable de contador para que comience con 1 e incremente en bucle. Consulte con sentencia if es verdadera por% y cambiar el nombre de la clase

@{ int counter = 1;} 

@foreach (var item in Model) 
{ 

if((counter % 3) ==0) 
{ 
<div class="ChangedName"> 
} 
else 
{ 
<div class="ForumChild"> 
} 
i++; 
+2

esto no es compatible con la afeitadora, porque se quejará de las etiquetas no coincidentes – yano

Cuestiones relacionadas