4

I am a junior web developer and this is my first time posting here.

I am having a problem where for some reason the most inner if statement is not recognized and is instead printed as text. Anyone got a solution for this?

EDIT: Found a solution: 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>

2 Answers 2

9
          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>
Sign up to request clarification or add additional context in comments.

Comments

1

**** Apologize my expression but it is a little bit stupid but works like this example. You don't need extra @ inside code and the use of html.raw becomes very handy! Beware of missing closing TAGS and the trick is to wrap the conditional contents inside <text> tags ;) As per the example below: ****

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


        }


    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.