C# 在Razor视图中有条件地更改CSS类

C# 在Razor视图中有条件地更改CSS类,c#,css,asp.net-mvc-3,razor,C#,Css,Asp.net Mvc 3,Razor,我需要将标记的CSS类更改为'forumChild'类。它必须更改foreach循环的每3个循环 有没有办法在控制范围内做到这一点 <div class="Forum"> <p>The Forum</p> @foreach (var item in Model) { <div class="ForumChild">

我需要将
标记的CSS类更改为'forumChild'类。它必须更改foreach循环的每3个循环

有没有办法在控制范围内做到这一点

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

论坛

@foreach(模型中的var项目) {
@foreach(item.Blog.comment中的var注释) { var db=new ACapture.Models.ACaptureDB(); var Name=来自db.Profile.AsEnumerable()中的p 其中(p.AccountID==comment.AccountID) 选择p; @评论,评论 } }

提前感谢

我们如何处理此问题:

1) 您需要创建助手方法,该方法将通过一些代码返回css类

string GetDivClass(int code)
{
  var classes = new [] {"first", "second", "third"};
  return classes[code];
}
2) 创建计数器/索引并每次在循环中递增

3) 在div元素处调用助手方法,如
GetDivClass(索引%3)

PS


它只是POC,所以不要在实际应用程序中使用它(你需要添加一个验证逻辑并将“类”初始化移动到另一个地方)。

你可以在Razor视图中编写任何你喜欢的代码,所以要想做你想做的事情,你可以这样做(我省略了大部分内部内容):

@{
var className=“ForumChild”;
}
@for(int i=0;i
您可以添加一个计数器变量,使其以1开头,并在循环中递增。按%检查语句是否为true,并更改类名

@{ int counter = 1;}

 @foreach (var item in Model)
{

if( (counter % 3) ==0 )
{
 <div class="ChangedName">
}
else
{
 <div class="ForumChild">
}
i++;
@{int counter=1;}
@foreach(模型中的var项目)
{
如果((计数器%3)=0)
{
}
其他的
{
}
i++;
@{
int计数器=0;
}
@foreach(模型中的var项目)
{ 
计数器++;
//这里还有其他标记
如果(计数器==6)
{
计数器=0;
}
}

在您的示例中,
classRed
classBlue
是CSS类

,最好在函数内部执行模运算。这样,调用者就不需要知道它有多少项,将来也可以在不破坏现有代码的情况下添加更多项。这句话很好,但很难取消了解此方法实际返回的布局。也许最好向该方法添加某种css类组名(GetDivClass(字符串CSSClasseGroup,int-code))。这在razor中不受支持,因为它会抱怨标记不匹配。如果我有多个Cals(2除外),我可以在这里做什么?对于任何访问此旧问题的人。CSS可以处理第n个子类。请看,您不再需要编写条件第n个循环
@{ int counter = 1;}

 @foreach (var item in Model)
{

if( (counter % 3) ==0 )
{
 <div class="ChangedName">
}
else
{
 <div class="ForumChild">
}
i++;
 @{
   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;
    }

 }