Asp.Net MVC4, "onload" asynchrone calls naar action?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:44
Hallo allen,

Ik ben voor mezelf lekker aan het het spelen met MVC4 en ik vind het prachtig, maar uiteraard loop ik als webdeveloper n00b tegen wat probleempjes aan :).
Ik ben bezig met een soort statuspagina voor op m'n server, op dit moment staat er een lijst met computers en andere devices op. Hiervan wil ik laten zien of ze aan of uit staan, ook dit is me gelukt door de apparaten te pingen. Het probleem hiermee is dat het even duurt voordat het pingen een timeout gooit, en het laden van de hele pagina hierdoor vertraagd wordt. Als er meerdere apparaten uit staan kan het in totaal wel even duren. Daarom wil ik het pingen asynchroon gaan doen met Ajax. Als test heb ik dit even gedaan door @Ajax.ActionLink te gebruiken, die een "Ping" action op m'n controller aanroept en een PartialView terug geeft. Ook dit werkt perfect, maar ik wil eigenlijk bij het laden van de pagina voor alle apparaten automatisch deze action aanroepen.
Ik ben dus eigenlijk op zoek naar een soort "Ajax.OnLoad" als het ware.

Ik heb nu zelf twee oplossingen bedacht:
• (verborgen) Ajax.ActionLinks gebruiken, en deze "onload" van de pagina allemaal aanroepen
• Zelf via jquery de action op de controller aanroepen (heb wel wat voorbeeldjes gezien her en der), maar volgens mij blijf ik dan met allemaal jquery code in m'n pagina zitten, wat een beetje tegen het "unobtrusive javascript" idee in gaat volgens mij

Wat is volgens jullie de beste oplossing? Of is er nog een betere die ik niet ken?

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 14:51

Sebazzz

3dp

Je laatste optie is het beste. Pagina laden en dan verschijdende AJAX calls uitvoeren.
mij blijf ik dan met allemaal jquery code in m'n pagina zitten, wat een beetje tegen het "unobtrusive javascript" idee in gaat volgens mij
Zo ver ik weet betekend unobtrusive dat de pagina zonder Javascript ook werkt. Dus bijvoorbeeld dat je bij een bloggingsysteem een comment met AJAX kan verwijderen, maar dat het zonder javascript support ook werkt maar dan met pagina refresh.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:44
Sebazzz schreef op woensdag 11 april 2012 @ 17:32:
Zo ver ik weet betekend unobtrusive dat de pagina zonder Javascript ook werkt. Dus bijvoorbeeld dat je bij een bloggingsysteem een comment met AJAX kan verwijderen, maar dat het zonder javascript support ook werkt maar dan met pagina refresh.
Dat vind ik meer een vorm van gracefull degradation. Unobtrusive javascript houdt volgens mij meer in dat je je html niet "vervuild" met allerlei inline javascript. Bijvoorbeeld mijn "ping" actionlink:

Unobtrusive:
HTML:
1
2
3
<div id="xxx">
    <a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#xxx" href="/Admin/PingResult/5">Ping</a>
</div>

Niet-unobtrusive (obtrusive :) ):
HTML:
1
2
3
<div id="xxx">
    <a href="/Admin/PingResult/5" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'xxx' });">Ping</a>
</div>

Maar dat terzijde. Ik kan wel een onload maken met jquery, maar dan ziet dat er zoiets uit:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
    $(function myfunc() {

        var id = 5;
        //alert(id);
        var url = '/Admin/PingResult';
        $.get(url, { id: id }, function (data) {
            $('#ping_5').html(data);
        }); 

    }); 
</script>

<div id='ping_5'>
</div>

Voor elk apparaat in de lijst. Het werkt prima, maar ik vind het niet zo netjes eigenlijk..

[ Voor 18% gewijzigd door sig69 op 11-04-2012 19:00 ]

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Volgens mij is dit ook de enige nette manier, er is nog geen Ajax.Action methode (misschien in 4 wel?).