webForumDet fria alternativet

Var placera dynamisk css kod i mvc app?

.NETur .NET

3 svar · 354 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#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?!

Medlem sedan juli 2003555 inlägg
#2

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

Medlem sedan okt. 2007446 inlägg
#3

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>
Medlem sedan juni 20003 076 inlägg
#4

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. :)

135 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)