Avatar billede LarsLju Nybegynder
18. januar 2013 - 09:25 Der er 5 kommentarer

C# razor i Umbraco: Inlejret if-sætning

Hej

Jeg har en razor sætning i Umbraco, der kan autogenerere en menu fint og fornemt.

Mit problem er, at jeg gerne vil have en if-sætning indlejret.

Koden, jeg har nu, og som fungerer, ser sådan ud:

@{
  <ul>
    <li><div><a href="/" id="text_indent_start">HOME</a></div></li>
    @foreach (var c in Model.AncestorOrSelf(1).Children)
    {
      var selected = Array.IndexOf(Model.Path.Split(','),c.Id.ToString())>=0?"class=\"selected\"":"";
      <li @Html.Raw(selected)>
    <div>   
    <a href="@c.Url">@c.Name</a></div>
      </li>   
   
}

Jeg vil gerne lave en if-then sætning omkring <div> tagget, så den 6. gang den looper sætter en klasse på div-tagget. Det er i sig selv nemt nok. Men hvis jeg sætter en if-sætning ind efter "<li @Html.Raw(selected)>", så vises den på siden som tekst. Hvis jeg sætter et @ foran "if", så kommer der en fejlmeddelelse når jeg gemmer.

Er der nogen venlige folk, som kan give mig et godt råd her.
På forhånd tak og venlig hilsen
Lars
Avatar billede Slettet bruger
19. januar 2013 - 07:49 #1
@{
Int i = 6;
  <ul>
    <li><div><a href="/" id="text_indent_start">HOME</a></div></li>
    @foreach (var c in Model.AncestorOrSelf(1).Children)
    {
      var selected = Array.IndexOf(Model.Path.Split(','),c.Id.ToString())>=0?"class=\"selected\"":"";
      <li @Html.Raw(selected)>
    If(i%6=0) {
    <div class="">
    }
    Else {
        <div>
    }
    <a href="@c.Url">@c.Name</a></div>
      </li>
      i++;
    }

   
}


Noget i denne stil.
Beklager dårlig tab og store små bogstaver.
Ligger i sengen med ipad og kan ikke sove :)
Avatar billede Slettet bruger
19. januar 2013 - 07:50 #2
Int i = 6 i starten skal være = 1 :)
Avatar billede LarsLju Nybegynder
21. januar 2013 - 14:59 #3
Foreløbigt tak for dit svar, jeg prøver og vender tilbage. Men ... god bedring :-)
Avatar billede LarsLju Nybegynder
21. januar 2013 - 15:39 #4
Hej Josh

Koden ser fornuftig ud i sig selv, men den ender lige præcis dér, hvor jeg ikke vil have det.

Den opfatter c#-koden som tekst, der skal vises på siden. Se evt. [img]http://cphcap.inforce.dk/media/1129/screendump_cph.png[img]. Den rigtige navigation er øverst, den forkerte nederst.

Ved du eller andre, hvordan jeg slipper ud over, at den opfatter c# som tekst?

Venlig hilsen
Lars

Koden er:

    @{int i = 1;}

   
@{
  <ul>
    <li><div><a href="/" id="text_indent_start">HOME</a></div></li>
    @foreach (var c in Model.AncestorOrSelf(1).Children)
    {
   
        var selected = Array.IndexOf(Model.Path.Split(','),c.Id.ToString())>=0?"class=\"selected\"":"";
        <li @Html.Raw(selected)>
   
        if(i%6=0) {
            <div id="no_right_padding">
            }
        else
            {
                <div>
            }
        <a href="@c.Url">@c.Name</a></div>
          </li>
          i++;
    }

  </ul>
}
Avatar billede LarsLju Nybegynder
22. januar 2013 - 13:23 #5
Hej igen

Jeg kan få det til at virke nu. Der må bare ikke komme først html, så C#, så html og så c#. Det bliver en smule mere kluntet, og hvis nogen kan få det til at virke på en mere elegant måde så lytter jeg hellere end gerne!

Her er den kode, der virker:

@inherits umbraco.MacroEngines.DynamicNodeContext

    @{var i = 1;}

   
@{
  <ul>
    <li><div><a href="/" id="text_indent_start">HOME</a></div></li>
    @foreach (var c in Model.AncestorOrSelf(1).Children)
    {
      var selected = Array.IndexOf(Model.Path.Split(','),c.Id.ToString())>=0?"class=\"selected\"":"";
 
    if(@i < 5)
    {
      <li @Html.Raw(selected)>
           
                <div>   
   
          <a href="@c.Url">@c.Name</a></div>
      </li>   
    }
    else
    {
        <li @Html.Raw(selected)>
                <div id="no_right_padding">
          <a href="@c.Url">@c.Name</a></div>
      </li>   
    }
   
    i++;
}
   


  </ul>
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester