ASP.NET MVC 3 Razor使用if语句嵌套foreach

时间:2012-07-18 19:35:23

标签: asp.net-mvc razor nested-loops

我是初级网站开发人员,这是我第一次在这里发帖。

我遇到问题,由于某种原因,最内部的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/Index?productID=@item.ID">
                    <img src="Images/@item.ImageName" width="192" height="108"/>
                </a>
                <br />
                <a href="/ProductDetails/Index?productID=@item.ID">@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>

2 个答案:

答案 0 :(得分: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/Index?productID=@item.ID">
                                <img src="Images/@item.ImageName" width="192" height="108"/>
                            </a>
                            <br />
                            <a href="/ProductDetails/Index?productID=@item.ID">@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 :(得分:1)

****道歉我的表情,但它有点愚蠢,但就像这个例子一样。你不需要额外的@ inside代码,使用html.raw变得非常方便!谨防错过关闭TAGS,诀窍是将条件内容包装在<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">$@item.ProductPrice</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>


        }


    }