Frågan 20 juni 2010 17:04 #1 Hej,
håller på å labbar lite MVC 2 och har en fundering.
Min usercontrol vy ser ut så här nu:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IList<Category>>" %>
<ul class="categories">
<%
foreach (Mvc.Entities.Category category in Model)
{
if (category.IsExpanded)
{
var css = "";
var padding = "";
if (category.Depth == 0)
{
css += " topItem";
}
else
{
css += " subItem";
padding = "style=\"padding-left:" + (category.Depth * 20) + "px;\"";
}
if (category.IsSelected)
{
css += " selected";
}
%>
<li class="<%=css %>"><a <%=padding %> href="<%=Url.Action("Index","Home",new {categoryid=category.ID}) %>" title="<%=category.Name %>"><%=category.Name%></a></li>
<%
}
}
%>
</ul>
Är det ok att ha csskoden så här?
Varför jag undrar är för man ska väl egentligen inte ha matematik i en vy?!
Hm, det där är väl bra ut, nästan? Att räkna ut rent grafiska saker (avstånd, hur saker ska renderas osv) ska se ut är ju ett jobb för just vyn. Däremot tycker jag att du har lite feltänk, det känns som att din färdiga lista borde se ut ungefär såhär istället:
<ul>
<li>nivå 1
<ul>
<li>nivå 2</li>
<li>nivå 2
<ul>
<li>nivå 3</li>
</ul>
</li>
</ul>
</li>
<li>nivå 1</li>
</ul>
Dvs, inte använda padding utan nästa istället. På så sätt behöver du ingen inline-css utan kan skapa indenteringen snyggt i din stylesheet
R rhdf Medlem sedan okt. 2007 446 inlägg Hur ser den renderade html:en ut?
Jag gissar på att det är någon form av trädstruktur du försöker rendera, eller?
men du borde kunna flytta ut den där logiken till en metod i nån klass
så att du bara behöver skriva
<li class="<%=GetCssClasses(category.IsExpanded,category.Depth,category.IsSelected) %>"><a <%=padding %> href="<%=Url.Action("Index","Home",new {categoryid=category.ID}) %>" title="<%=category.Name %>"><%=category.Name%></a></li>
Tack båda! :bire
Visst borde listan vara nästlad istället för padding! Tänkte inte på det! :)
En GetCss klass vore annars ett alternativ. :)