2012-07-18 88 views
3

我是初级Web开发人员,这是我第一次在这里发布。ASP.NET MVC 3 Razor嵌套foreach with if语句

我有一个问题,因为某些原因最内在的if语句不被识别,而是被打印为文本。任何人都有这个解决方案?

编辑:找到一个解决方案:Can't seem to conditionally create a new table row using Razor's foreach and if statements?

@model IEnumerable<FairShare.Models.Product> 
@{ 
    ViewBag.Title = "Products"; 
} 
<h2> 
    Auctions</h2> 
<table border="1"> 
    <col width="192" /> 

    @{int i = 0;} 
     @foreach (var item in Model) 
     { 
      if (item.DateEnd.Subtract(DateTime.Now).TotalMinutes > -5) 
      { 
       if (i == 0) 
       { 
        <tr> 
       } 
      <td> 
       <a href="/ProductDetails/[email protected]"> 
        <img src="Images/@item.ImageName" width="192" height="108"/> 
       </a> 
       <br /> 
       <a href="/ProductDetails/[email protected]">@Html.DisplayFor(modelItem => item.ShortTitle)</a><br /> 
       @Html.DisplayFor(modelItem => item.ShortDescription)<br /> 
       <div style="color: red;">@Html.DisplayFor(modelItem => item.TimeLeft)</div> 
       <div style="color: green;"> 
        Current bid: @Html.DisplayFor(modelItem => item.CurrentBid)</div> 
      </td> 

       i = i + 1; 
       if (i == 5) 
       { 
        </tr> 
        i = 0; 
       } 
      } 
     } 

</table> 

回答

8
  You need to write code this way. @Html.Raw("<tr>") 
      Copy the below code and paste it into your view. it will work. 

      @model IEnumerable<FairShare.Models.Product> 

      @{ 
       ViewBag.Title = "Products"; 
      } 
      <h2> 
       Auctions</h2> 
      <table border="1"> 
       <col width="192" /> 

       @{int i = 0;} 
        @foreach (var item in Model) 
        { 
         if (item.DateEnd.Subtract(DateTime.Now).TotalMinutes > -5) 
         { 
          if (i == 0) 
          { 
           @Html.Raw("<tr>") 
          } 
         <td> 
          <a href="/ProductDetails/[email protected]"> 
           <img src="Images/@item.ImageName" width="192" height="108"/> 
          </a> 
          <br /> 
          <a href="/ProductDetails/[email protected]">@Html.DisplayFor(modelItem => item.ShortTitle)</a><br /> 
          @Html.DisplayFor(modelItem => item.ShortDescription)<br /> 
          <div style="color: red;">@Html.DisplayFor(modelItem => item.TimeLeft)</div> 
          <div style="color: green;"> 
           Current bid: @Html.DisplayFor(modelItem => item.CurrentBid)</div> 
         </td> 


          i = i + 1; 
          if (i == 5) 
          { 
           @Html.Raw("</tr>") 
           i = 0; 
          } 
         } 
        } 

      </table> 
1

****道歉我的表情却是有点笨,但工作原理是这样的例子。您不需要额外的@内部代码,并且使用html.raw变得非常方便!谨防缺少关闭标签,诀窍在于将条件内容包装在<text>标签内;)根据以下示例:****

@{ 
     int x = 0; 
    } 

    @foreach (var item in Model) 
    { 

     if (x == 0) 
     { 
      <text> 
       @Html.Raw("<div id=\"rowbeg\" class=\"row\">") 
      </text> 
     } 

     <div class="col-md-3 col-sm-6 col-md-12"> 
      <div class="item"> 
       <!-- Use the below link to put HOT icon --> 
       <div class="item-icon"><span>HOT/SALE/50%</span></div> 
       <!-- Item image --> 
       <div class="item-image"> 
        @{ 
        var base64 = Convert.ToBase64String(item.ProductImage); 
        var imgSrc = String.Format("data:image/gif;base64,{0}", base64); 
        } 
        <img src='@imgSrc' style="max-width:200px; max-height:150px;" /> 
       </div> 
       <!-- Item details --> 
       <div class="item-details"> 
        <h5><a href="single-item.html" style="color:blue;">@item.ProductName</a></h5> 
        <div class="clearfix"></div> 
        <p>@item.ProductDescription</p> 
        <!-- Price --> 
        <div class="item-price pull-left">[email protected]</div> 
        <!-- Add to cart --> 
        <div class="pull-right"><a href="#" class="btn btn-success btn-sm">Add to Cart</a></div> 
        <div class="clearfix"></div> 
        <hr /> 
       </div> 
      </div> 
     </div> 

     x = x + 1; 
     if (x == 2) 
     { 
      x = 0; 
      <text> 
      @Html.Raw("</div>") 
      </text> 


     } 


    }