I am trying to display a list of items that should toggle a class for styling purposes. The idea is to create a foreach loop that will cycle through all the myObj
in the Model.
I tried the following code which does not work (because I'm doing it wrong)
@{ int i = 2;
foreach(var myObj in Model)
{
if (i % 2 == 0)
{
<div class="class1">
}
else
{
<div class="class2">
}
Html.Partial(...);
</div>
i += 1;
}
}
What is the proper way to accomplish this?
Update
I also tried the following code that, although compiles, does not render any HTML code within (and I'm sure there are objects in Model).
@{ int i = 2;
foreach(var myObj in Model)
{
if (i % 2 == 0)
{
@:<div class="class1">
}
else
{
@:<div class="class2">
}
Html.Partial(...);
@:</div>
i += 1;
}
}
This is the partial class being called
<div class="class">
<div class="class2">
@if (string.IsNullOrEmpty(var))
{
@var2
}
else
{
@var
}
</div>
<div class="class3">
@var3
</div>
</div>
<div class="class4">
<p>var4</p>
<ul class="class5">
<li>element1</li>
<li>element2</li>
</ul>
</div>
I'm sorry I can't post the actual names and variables.
You need to write
@Html.Partial(...)
to render the result to the page.Calling
Html.Partial
returns aHelperResult
with the partial view, but doesn't actually render it.You may be sure there are objects in some model - but not your model : ) the following sample code derived directly from yours works just fine:
Let's start with improving your code.
Improvement step 1:
Improvement Step 2 (using a custom HTML helper for the class):
where MyClass is defined like this:
Improvement step 3 which is the state of the art (using Templated Razor Delegates):
where the
List
extension method looks like this:I vote for improvement number 3 which is far better and more concise than the original foreach loop.
You need to prefix the lines with non-well-formed tags with
@:
to prevent Razor from trying to parse the tags.Details.