asp.net-mvc


How can I make an unordered list appear within a foreach loop in MVC3 Razor?


I have the following code:
#foreach (Content topic in Model.Topics)
{
if (topic.RowKey.Substring(2, 2) == "00")
{
<h3>#topic.RowKey.Substring(0, 2).TrimStart('0') - #Html.Raw(topic.Title)</h3>
}
else
{
<p>#String.Format("{0}.{1}",topic.RowKey.Substring(0, 2).TrimStart('0'),topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - #Html.Raw(topic.Title)</p>
}
}
My input data (value of topic.RowKey) looks like this:
0100 <- This is topic 1
0101 <- This is topic 1.1
0102 <- This is topic 1.2
0103 <- This is topic 1.3
0200 <- This is topic 2
0201 <- This is topic 2.1
etc....
This works but what I would really like to do is to have an h3 heading every time the first two digits of the RowKey change and then between then and then next h3 heading I would like to have an unordered list instead of just <p>xxx</p>. I have tried lots of different combinations of things but nothing works. Is this even possible to do with Razor? Where I had huge problems was how can I get the <ul> and </ul>s to appear correctly? I know I can put a <ul> after the <h3> but how can I place the </ul>?
not checked in razor, there may be an # missing here or there, but...
#var groupedTopics = Model.Topics.GroupBy(t => t.RowKey.Substring(0, 2));
#foreach (var group in groupedTopics) {
var firstTopic = group.First();
<h3>#firstTopic.RowKey.Substring(0, 2).TrimStart('0') - #Html.row(firstTopic.Title)</h3>
<ul>
#foreach (var topic in group.Skip(1)) {
<li>#String.Format("{0}.{1}",topic.RowKey.Substring(0, 2).TrimStart('0'),topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - #Html.Raw(topic.Title)</li>
}
</ul>
}
It would be more easy create a model parent-child, populated before send it to the view
the model
public class topic {
//everything else
public List<topic> subtopic{ get; set; }
}
the view
#foreach (Content topic in Model.Topics)
{
<h3>#topic.RowKey.Substring(0, 2).TrimStart('0') - #Html.Raw(topic.Title)</h3>
if (topic.subtopic.count > 0)
{
<ul>
#foreach (Content subtopic in topic.subtopic)
{
<li>#String.Format("{0}.{1}", topic.RowKey.Substring(0, 2).TrimStart('0'), topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - #Html.Raw(topic.Title)</li>
}
</ul>
}
}
Its not about razor, this is something you can solve with any rendering enginge, web or windows forms or anything else.
#model List<Topic>
#{
int currentKey = 0;
bool withinUL = false;
foreach (Topic topic in Model)
{
if (topic.RowKey != currentKey)
{
currentKey = topic.RowKey;
if (withinUL)
{
withinUL = false;
#:</ul>
}
#:<h3>#topic.RowKey - #Html.Raw(topic.Title)</h3>
}
else
{
if (!withinUL)
{
withinUL = true;
#:<ul></ul>
}
#:<li>#topic.RowKey - #Html.Raw(topic.Title)</li>
}
}
}
#{bool isFirst = true;}
#foreach (Content topic in Model.Topics)
{
if (topic.RowKey.Substring(2, 2) == "00")
{
if(!isFirst) {
<text></ul></text>
isFirst = false
}
<h3>#topic.RowKey.Substring(0, 2).TrimStart('0') - #Html.Raw(topic.Title)</h3>
}
else
{
<li>
<p>#String.Format("{0}.{1}",topic.RowKey.Substring(0, 2).TrimStart('0'),topic.RowKey.Substring(2, 2).TrimStart('0').PadLeft(1, '0')) - #Html.Raw(topic.Title)</p></li>
}
}
</ul>

Related Links

Nuget Requirement Conflict
how Use ActionLink in Folder App_Code Mvc6 Asp.Net
MVC application Performance
ASP.NET MVC date string slash being converted to dash in Safari input fields
File upload formatting in Bootstrap MVC
ChildAction in MVC not rendering
Using Html.DropDownListFor and selecting a value inside the SelectList will not work together
multiple ajax beginform in one page
Umbraco Lucene Index Device not ready
Single Sign On between Azure website and website hosted in Azure VM
Why can't I allow '*' characters in webapi routes safely? (or, if it can, how?)
Runtime Error using Redis Cache Session State Provider
What's the benefits of asp.net MVC routing?
MVC Controller.File returns blank pdf
Allowing commas in decimal values using Fluent Validation
ASP.NET-MVC How to return correct response code?

Categories

HOME
azure
mongodb
groovy
oozie
opencl
servlets
spi
drag
push
wav
light-inject
doorkeeper
nanotime
git-svn
w2ui
gyroscope
textmatebundles
line-breaks
robotium
weather-api
listbox
text-parsing
f2py
apscheduler
parallax.js
asana-api
akka-http
magento2.0.2
detach
gosublime
titanium-alloy
jdom-2
kmdf
otroslogviewer
sagepay
h5py
nomenclature
wp-api
maven-jetty-plugin
gretl
name-mangling
smartbanner
sizing
agile-processes
ispconfig
mink
xceed
texture2d
android-location
sql-server-2016-express
winobjc
scrutinizer
rabbitvcs
jquery-load
jni4net
selectsinglenode
byte-order-mark
gitattributes
modern-ui
excel-charts
mysql5
sendto
spread-toolkit
xcode6.1.1
jxta
scala-pickling
mongo-shell
modx-evolution
polarssl
neventstore
hamlc
slimbox
datadesign
shebang
domain-mapping
server.mappath
consistent-hashing
sharepoint-timer-job
having
codi
rails-3.1
system-tray
indextank
ryz
markitup

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App