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

时间:2012-08-02 20:23:12

标签: c# css asp.net-mvc-3 razor

我需要使用'forumChild'类更改<div>标记的CSS类。它必须改变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>

提前致谢

4 个答案:

答案 0 :(得分:46)

 @{
   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;
    }

 }

其中classRedclassBlue是CSS类

答案 1 :(得分:4)

我们如何处理这个问题:

1)你需要创建一个辅助方法,它将通过一些代码返回css类。

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

2)创建计数器/索引并在每次循环中递增它。

3)在 div 元素中调用GetDivClass(index % 3)之类的辅助方法。

PS

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

答案 2 :(得分:2)

你可以将你喜欢的任何代码写入Razor视图,所以为了做你想到的事情,你可以做这样的事情(我遗漏了大部分内部的东西):

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

答案 3 :(得分:-2)

您可以添加一个计数器变量,以1开头并循环递增。使用%检查if语句是否为true并更改类名

@{ int counter = 1;}

 @foreach (var item in Model)
{

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