【问题标题】:Conditionally change CSS class in Razor view有条件地更改 Razor 视图中的 CSS 类
【发布时间】:2012-07-31 21:05:54
【问题描述】:

我需要将<div> 标签的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>

提前致谢

【问题讨论】:

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


【解决方案1】:
 @{
   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 类

【讨论】:

  • 如果我有多个 calsses 除了 2 ,我可以在这里做什么?
【解决方案2】:

我们如何处理这个问题:

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

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

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

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

PS

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

【讨论】:

  • 以您的示例为例,最好在函数内部进行模运算。这样调用者就不需要知道它有多少项,而且您将来还可以在不破坏现有代码的情况下添加更多项。
  • 说得好,但在布局上理解此方法实际返回的内容会很棘手。也许在方法中添加某种 css 类组名称会更好(GetDivClass(string cssClassesGroup, int code)。)。
【解决方案3】:

您可以在 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>

【讨论】:

    【解决方案4】:

    您可以添加一个计数器变量以从 1 开始并在循环中递增。通过 % 检查 if 语句是否为真并更改类名

    @{ int counter = 1;}
    
     @foreach (var item in Model)
    {
    
    if( (counter % 3) ==0 )
    {
     <div class="ChangedName">
    }
    else
    {
     <div class="ForumChild">
    }
    i++;
    

    【讨论】:

    • 剃须刀不支持这个,因为它会抱怨标签不匹配
    猜你喜欢
    • 2021-10-01
    • 2012-11-12
    • 2015-04-08
    • 2018-08-29
    • 1970-01-01
    • 2017-05-07
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多