none
Single Page Application (MVC) im Stil der MS Azure Plattform RRS feed

  • Frage

  • Hi,

    ich möchte gerne eine Single Page Application entwickeln, die sich an den Stil der MS Azure Plattform anlehnt und "Fensterelemente" horizontal aneinanderreiht. 

    Für den Anfang möchte ich das eher "simpel" halten und "nur" eine kleine Benutzerverwaltung umsetzen (CRUD von Benutzern). Später möchte das noch um RBAC erweitern und diese Benutzer Gruppen zuweisen und dann kontinuierlich weitere "Programmfunktionen" dazu entwickeln.

    Ich stelle mir das ganze so vor, dass sich auf der linken Seite das die vertikale Bootstrap Navigation befindet. Klickt man Mitarbeiter wird ein Fenster mit einer Liste an Mitarbeitern "angedockt", nun kann man neue Mitarbeiter hinzufügen (neues Fenster wird angedockt), bestehende Mitarbeiter bearbeiten (neues Fenster wird angedockt) oder Mitarbeiter löschen. 

    Gibt es im Netz irgendwo Ressourcen, wie man ein solches Design/Prinzip mit MVC umsetzen kann? Ich weiß aus einem Blogeintrag von MS Azure lediglich, dass z.b. Knockout JS dabei genutzt wird, aber wie das funktioniert konnte ich bisher nicht in Erfahrung bringen. 

    Danke vorab schonmal und viele Grüße,

    Sascha

    Mittwoch, 27. Juli 2016 09:23

Antworten

  • Hallo,

    eine gesamte Anleitung im Internet kennen ich leider nicht aber ich kann dir ein paar Tipps geben. 

    Ich persönlich finde SPA die nur noch mit JS arbeiten inakzeptabel eine Website muss auch ohne JS arbeiten.

    Grundegeln gibt es 2 Ansätze 

    Bei Anfragen vom View übergibt am per JsonResult ein Model mit dem man dann Client seitig den View baut z.B. mit Knockout

    Oder man übergibt gleich ein HtmlString. Diesen kann man dann mit jQuery einfach auf die Seite packen.

    Ich persönlich übergebe fast immer ein HtmlString.

    Ein Beispiel mit AngularJS und einer Index Seite. Ich erstelle 2 ActionResult

    public ActionResult Index()
            {
                return View();
            }
    
            public ActionResult IndexPatrial()
            {
                return PartialView();
            }

    Im IndexPartial ist erst der gesamte Html Content. Wenn jemand die Website abruft wird dieses ganz normal übergeben. Sollte aber AngularJS schon laufen, fragt angularjs den IndexPartial ab und übergibt die Seite.

    $routeProvider
            //Honme
            .when('/', { templateUrl: '/Home/IndexPatrial' })
    
        ;

    Ich nutze eigentlich nur das Routing von AngularJS.

    Noch ein Beispiel wie man das mit jQuery und JsonResult machen würde

    //Anfrage per jQuery
    $.getJSON('/Home/IndexJson/', model, function (data) {
    
       $('#div').empty().html(data);
                        
    });
    
    //MVC
    public JsonResult IndexJson(Model model)
    {
         var htnlString = RenderRazorViewToString("IndexPartial", modelList);
    
         return Json(htmlString, JsonRequestBehavior.AllowGet);
    }
    
    public string RenderRazorViewToString(string viewName, object model)
            {
                ViewData.Model = model;
                using (var sw = new StringWriter())
                {
                    var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                    var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
    
                    viewResult.View.Render(viewContext, sw);
    
                    viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
                    return sw.GetStringBuilder().ToString();
                }
            }

    Ich hoffe ich habe dir etwas geholfen

    Gruß

    Thomas


    Mittwoch, 27. Juli 2016 11:00