Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
sluiten

Onderzoek Tweakers

Om beter te begrijpen wat jij waardevol vindt aan Tweakers en andere online content of features, voeren we een onderzoek uit. Wil jij ons helpen door de bijbehorende vragenlijst in te vullen? Het invullen neemt ongeveer 15 minuten in beslag en onder alle deelnemers verloten we drie Tweakers-goodiebags.

Naar het onderzoek

Toon posts:

[MVC4/Razor]Multilevel routing

Pagina: 1
Acties:

Vraag


  • ElCondor
  • Registratie: juni 2001
  • Laatst online: 10:22

ElCondor

Geluk is Onmisbaar

Topicstarter
Ik ben thuis bezig met het maken van een MVC4 applicatie waarmee ik Comics vanaf een zelf geschreven API wil kunnen browsen.

Ik heb daarvoor een ComicController geschreven en in de global.asax routes naar die controller gedefiniëerd.
Daarnaast heb ik een view pagina gemaakt die, bij het openen van een comic de mogelijkheid biedt om naar de volgende pagina te browsen.

Mijn Global Asax ziet er wat routing betreft zo uit:
C#:
1
2
3
4
5
routes.MapRoute(
                "Comic", // Route name
                "{controller}/{action}/{folder}/{file}/{page}/{*size}", // URL with parameters
                new { controller = "Comic", action = "Read" , folder = UrlParameter.Optional, file = UrlParameter.Optional, page = UrlParameter.Optional, size =UrlParameter.Optional } // Parameter defaults
            );

Mijn controller bevat de volgende Action definitie:
C#:
1
2
3
4
5
6
public ActionResult Read(string folder, string file, string page, string size)
        {
            Comic comic = new Comic();
            <code om een comic pagina op te halen en in de viewbag te stoppen>
            ViewBag.ImageSource = config.ApiLocation + "?file=" + @comic.requestedfile + imageSourceParams;
            return View("Comic", comic);

en mijn View bevat de volgende Html.ActionLink definitie:
C#:
1
2
3
<div id="nextButton">
            @Html.ActionLink("Next", "Read", "Comic", new { file = comic.requestedfile, page = comic.Next }, null)
        </div>

Het vreemde is nu dat de href door de action link gerenderd wordt naar:
http://server/app/Comic/Read?file=<pad_naar_comic_bestand>/bestand.cbr&page=1
Dit werkt op zich, maar ik zou eigenlijk het liefst hebben dat de ActionLink gerenderd wordt naar
http://server/app/Comic/Read/<pad>/bestand.cbr/<page>

Ik krijg dit echter niet voor elkaar.
Ik heb pagina's aan documentatie doorgespit over de eigenschappen van ActionLink, maar ik kan geen manier vinden om de QueryString om te zetten naar een Routemapping. |:(

Ik heb gevonden dat er verschillende manieren zijn om ActionLinks te definiëren in een view, maar ik krijg altijd de folder, file en page parameter als querystring gerenderd in plaats van als route.

Volgens mij heb ik wel op de juiste manier de route gedefiniëerd in de Global.Asax en ik weet nu niet meer wat ik verder nog kan proberen.

Als meer informatie nodig is, dan laat weten, ik kan meer code dan dit wat er nu staat laten zien, maar volgens mij staan de belangrijkste onderdelen er nu wel.

Ik maak gebruik van VS2017 CE en ASP.NET4.6 en MVC4.
Kan iemand mij een duw in de juiste richting geven over hoe ik dit voor elkaar kan krijgen? Of kan een route niet zo diep gedefniëerd worden?

-EDIT-
Ik heb even een deploy gedaan hier
Als ik daar dan vervolgens handmatig de URL ingeef:
https://www.de-baay.nl//C...01%20-%20Minutemen.cbr/12 dan werkt de URL wel! *O*
Het probleem zit hem dus echt in het opbouwen van de ActionLink. -O-

De volledige code van de Web applicatie is hier te vinden:
https://github.com/scdeba...rsionTo4.6/ComicReaderWeb. Vergeef me voor nu nog even vreselijke fouten en lelijke code. Dit is een van de eerste projecten die ik helemaal zelf uit de grond stamp.

[Voor 10% gewijzigd door ElCondor op 28-12-2017 00:11]

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)

Beste antwoord (via ElCondor op 29-12-2017 16:39)


  • MatHack
  • Registratie: oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Probeer de MapRoutes in je Global.asax eens om te draaien, zodat de Default als laatste staat. De routes worden namelijk sequentieel getest om te kijken of ze bruikbaar zijn.

Tip voor de volgende keer: Post alle routemappings in je post hier op het forum, want je post omvat dus niet alle routing instellingen die in je global.asax staan.

Factorio: MatHack • D3: MatHack#2293

Alle reacties


Acties:
  • Beste antwoord
  • +1Henk 'm!

  • MatHack
  • Registratie: oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Probeer de MapRoutes in je Global.asax eens om te draaien, zodat de Default als laatste staat. De routes worden namelijk sequentieel getest om te kijken of ze bruikbaar zijn.

Tip voor de volgende keer: Post alle routemappings in je post hier op het forum, want je post omvat dus niet alle routing instellingen die in je global.asax staan.

Factorio: MatHack • D3: MatHack#2293


  • ElCondor
  • Registratie: juni 2001
  • Laatst online: 10:22

ElCondor

Geluk is Onmisbaar

Topicstarter
Thx, ja, ik heb het idee dat het hem daar inderdaad in zit. Ik denk dat ik die Comic Controller er hardcoded in ga zetten en hem dan boven aan zetten ik denk dat hij nu opgevangen wordt door deze:
C#:
1
2
3
4
5
routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Die staat er nu namelijk boven, maar als ik die naar beneden stuur dan wordt de homepage naar de Comic controller omgeleid in plaats van naar de Home controller.

Overigens zijn deze twee de enige die in de Global Asax geconfigureerd zijn. Maar bedankt voor de hint in ieder geval.

-EDIT-

En inderdaad! Dat was de oplossing. De routes toch niet helemaal lekker ingesteld. Ik dacht dat de routes syntax altijd {variables} verwacht, maar je kunt de Controllers en Actions het best hardcoderen voor de beste matching.
Het ziet er nu zo uit:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Comic", // Route name
                "Comic/Read/{folder}/{file}/{page}", //{*size}", // URL with parameters
                new
                {
                    controller = "Comic",
                    action = "Read",
                    folder = "",
                    file = "",
                    page = "0"//,
                    //size = UrlParameter.Optional
                } // Parameter defaults
            );

            routes.MapRoute(
                "Home", // Route name
                "Home/Index/{page}", // URL with parameters
                new { controller = "Home", action = "Index", page = "1" } // Parameter defaults
            );

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

En hier is het resultaat voor nu te vinden.
Nu moet ik nog wat zaken aanpassen aan Comics die in subfolders onder mainfolder zitten, maar daar ga ik wel uitkomen.
En dan het werken aan de layout :)

Bedankt MatHack! d:)b O+

[Voor 53% gewijzigd door ElCondor op 29-12-2017 16:45]

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


  • Sandor_Clegane
  • Registratie: januari 2012
  • Laatst online: 10:36

Sandor_Clegane

Fancy plans and pants to match

Net even gekeken, maar dat is wel vet. Misschien was je het al van plan, maar OnClick naar de volgende pagina leek me wel wat.

  • ElCondor
  • Registratie: juni 2001
  • Laatst online: 10:22

ElCondor

Geluk is Onmisbaar

Topicstarter
quote:
Sandor_Clegane schreef op vrijdag 29 december 2017 @ 22:50:
Net even gekeken, maar dat is wel vet. Misschien was je het al van plan, maar OnClick naar de volgende pagina leek me wel wat.
Thx, ja, dat is inderdaad wel een goed idee :) Mijn uiteindelijke idee is eigenlijk een Android app die met swipen naar de volgende pagina gaat of de linkerhelft van de pagina als previous click area definiëren en de recherhelft van de pagina and Next. Zo wordt het ook een beetje touch vriendelijk.

Volgende week ga ik me twee weken (want vakantie) kwaad maken om layout en functionaliteit van de interface. Tot nu toe was het vooral de backend logica werkend krijgen. De website zelf is eigenlijk begonnen als een POC voor de API die erachter zit. Die API lepelt op request de lijst met beschikbare comics in XML format op en als een Comic opgevraagd wordt, dan worden deze per pagina naar image geparsed.

Heel ver in de toekomst wil ik nog een epub parser in de API bouwen zodat ik ook onderweg mijn epub verzameling kan benaderen. Ik weet dat daar al servers en apps voor zijn, maar ik vindt het leuk om te kijken of ik het allemaal aan de praat krijg.

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


  • Sandor_Clegane
  • Registratie: januari 2012
  • Laatst online: 10:36

Sandor_Clegane

Fancy plans and pants to match

Dat is helemaal mooi, misschien is een touchevent standaard al een onclick, lijkt me niet heel vreemd. Dan werkt het voor beide toepassingen.

Scan je die comics zelf?
Pagina: 1


Apple iPhone 11 Microsoft Xbox Series X LG OLED C9 Google Pixel 4 CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True