Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
ASP.NET MVC Konzept für RIA
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

ASP.NET MVC Konzept für RIA

beantworten | zitieren | melden

Hallo,
derzeit spiele ich etwas mit jQuery und diversen Plugins. So habe ich mir einen Windows-/WPF-ähnlichen Look mit Splittern/Panels aufgebaut. Eigentlich ändert sich immer nur der Inhalt im Center-Panel. Jetzt ergeben sich mir zwei Möglichkeiten dies zu tun.

1: Austausch des Inhaltes mit Javascript. Bereitstellung der CENTER-Inhalte über Views ohne Overhead (HTML-Header, Skripte, CSS)

2: Immer komplett neu laden. Definition der anderen Panels im SharedView.

Anzumerken ist, dass je nach Benutzer im linken Panel ein Treeview ist, der mit bis zu 500 Knoten bei Variante 2 immer neu geladen werden müsste.

Was meint ihr?

Viele Grüße!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Ganz klar Variante 1. In diese Richtung geht auch das Konzept von MVC.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Voelen Dank, noch jemand ein paar Tipps zur Umsetzung?
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo seeba,

je nachdem, was genau du umsetzen möchtest, könnte SignalR zur Echtzeit-Unterstützung hilfreich sein; siehe dazu den Blogpost Use SignalR with Knockout for real-time UX updates in ASP.NET MVC 3.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Super, da ich teilweise Echtzeitdaten aus der Produktion anzeigen muss, brauche ich auch genau das. Super und danke!
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo seeba,

freut mich, dass dir das weiterhilft. Dann verweise ich dich an dieser Stelle auch noch auf learn.knockoutjs.com, wenn du dir Knockout aneignen möchtest. Sehr schöne interaktive Tutorials vom Projektautor ...

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Echtzeit und HTTP stehen nicht im Einklang. Es bleibt weiterhin eine asynchrone Anwendung, die mit Sicherheit nicht in Echtzeit irgendwelche Daten anzeigen kann.

Zum Thema Umsetzung weiß ich nicht was Du genau nun erwartest. Wenn Du MVC kennst, und das Prinzip von jQuery verstanden hast, dann wirst Du eigentlich selbst drauf kommen, wie das ganze sauber im Einklang funktioniert.
Du hast eben Areas und Controllers in denen Du die Requests behandelst. Ob das nun volle Views sind, oder nur Teilansichten aufgrund von jQuery-Aktualisierungen, das behandelst Du in den Actions.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo Abt,

WebSockets kommen dem schon recht nahe. Klassiche HTTP-Requests via AJAX ist in SignalR ja nur als Fallback-Lösung gedacht, wenn WebSockets nicht unterstützt werden.

Guck dir mal das Video in diesem Blogpost an: KsigDo Task Pad – Real-Time UI View Model syncing across users with ASP.NET, SignalR, Knockout MVVM and EF

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Guten Morgen,

Okay. Ich hab mir das nun nicht genau angeschaut, aber auch wenn das über WebSockets läuft ist und bleibt es noch eine Webanwendung. Hier spielt auch der IIS und das Betriebssystem eine Rolle. Und hier gibt es eben Threads mit unterschiedlichen Prioritäten. Gerade bei Webanwendungen ist eben jeder Request ein eigener Thread.

Der Vorteil von WebSockets ist ganz klar die direkte Aktualisierung. Aber die Seite "Server" kannst Du hier nicht so ohne weiteres beeinflussen. Facebook nutzt was ähnliches, wenn auch mit rund einer Sekunde Vezögerung.
Man muss aber bei Windows Betriebssystemen sehr vorsichtig sein, wenn man das Wort "Echtzeit" nutzt. Und bei Web-Anwendungen gehört das aus meiner Ansicht überhaupt nicht in den Sprachgebrauch.

Aber wenn es "annähernd" das Ziel erreicht, ist es für seeba ja eventuell eine Lösung.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Vielen Dank, es war mir schon klar, dass das kein richtiges Echtzeit ist. Es geht nur darum die Daten zeitnah (<10s) zu aktualisieren.

Wenn ich mit Ajax.ActionLink und dem "replacen" von Content arbeite: Wie kann ich mir eine Funktion ohne JavaScript erhalten? Die Views enthalten dann ja kein Rahmenwerk mehr (Navigation) und sind quasi ohne JS unbenutzbar. Braucht man das heutzutage überhaupt noch?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von seeba am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Was ist "Ajax.ActionLink" ?

Kommt das von Microsoft.Mvc.js ? Wenn ja vergiss das. Das wird nicht mehr weiterentwickelt und von MS auch nicht mehr empfohlen.
Benutzt direkt die jQuery-Library und aktualisiere darüber den Content. Partial-Content kriegst Du ganz normal über eine Ajax-Abfrage.

Auf der Serverseite kannst Du mit Request.IsAjaxRequest abfragen, ob es sich dabei eben um eine Ajax-Abfrage handelt - sofern die Action beides unterstützen soll - und darüber den Content ausliefern.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Das ist eine Helper Klasse. Siehe bspw. hier: http://code-inside.de/blog/2011/04/11/howto-ajax-actionlink-asp-net-mvc-3/

Sollte man das verwenden oder lieber selbst schreiben mit jQuery?

Vielen Dank, ihr habt mir auf jeden Fall einige Keywords und Ansätze geliefert, die mir sehr weiter helfen.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Wie gesagt, weglassen und auf jQuery zurück greifen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
seeba
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Nochmal zu SignalR:
Habe jetzt etwas damit gespielt. Das Updates über Änderungen der anderen Clients funktioniert ja prima. Was aber, wenn ich etwas in der DB ändere. Wie kann ich dann die Clients aktualisieren?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15967

beantworten | zitieren | melden

Du musst in einem Singleton (für Web-Anwendungen am besten einen "Nested Singleton") jeden Client merken, den Du anschließend anpushen kannst.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers