Laden...

ASP.NET Core - Wie bekomme ich initial Daten in die View?

Erstellt von _daniel_ vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.634 Views
_
_daniel_ Themenstarter:in
227 Beiträge seit 2006
vor 7 Jahren
ASP.NET Core - Wie bekomme ich initial Daten in die View?

Hallo,

wie handhabt ihr das Bereitstellen von Initialen Daten in der View?

Mein bisheiger Ansatz

 var initialData = '@Json.Serialize(Model)';

versagt leider beim JSON.parse, wenn Anführungszeichen " in einem Text enthalten sind.

Der Rückgabewert einer Controller Action allerdings escaped die Anführungszeichen richtig.

Wie kann ich das in der View auch bewerkstelligen?

16.828 Beiträge seit 2008
vor 7 Jahren

ASP.NET ist zwar meine Heimattechnologie, aber ich hab nicht den Hauch eines Schimmers, was Du meinst.
Kannst Du das Problem evtl. so erklären, dass das auch jemand versteht, der nicht vor Deinem Code sitzt?

Vllt erklärst Du einfach, was Du erreichen willst....

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo daniel,

ich hab von ASP.NET auch mal was gehört 😉 ...aber so wirklich schnalle ichs auch nicht. Ich versuche mal zu erahnen was du vorhast.

Wenn du im ASP.NET Core MVC Daten an eine View geben willst kannst du das einfach via einem ViewModel machen.

public IActionResult Index()
{
        var viewModel = new MyViewModel();
        return View(viewModel);
}

und in der View dann oben

@model ... .MyViewModel

und dann kannst du mit Razor damit arbeiten:

@(Model.Value1)

Die View wird ja serverseitig fertig gemacht. Und dann zum Client geliefert.

Ist es das, was du meinst?

Gruss

Coffeebean

_
_daniel_ Themenstarter:in
227 Beiträge seit 2006
vor 7 Jahren

Hallo,

sorry für die maue Erklärung. Neuer Versuch:

Im Controller habe ich etwa folgendes. Also ein einfaches ViewModel mit einem Property in dem zwei " vorkommen.

public IActionResult Index()
{
        var viewModel = new MyViewModel();
        viewModel.EinText= "a\"b\"c";
        return View(viewModel);
}

In der View will ich nun ein Js Object aus dem Json machen.


  $(function () {
            var json= '@Json.Serialize(Model)';
            var test = JSON.parse(json);
        });

Erwarten würde ich nun dass in test.EinText der entsprechende Text steht.

Das Problem ist nun, dass der Fehler "Invalid character" kommt.

Lade ich das ganze mit einem ajax request


  $.ajax(..
 success: function (result) {
                  alert(result.EinText);
 }
...

ist EinText korrekt.
Die zugehörige Controller Funktion:

        public IActionResult GetIt()
        {
            var vm = new TestVm();
            vm.EinText = "a\"b\"c";
            return Ok(vm);
        }

Scheinbar geht bei "@Json.Serialize(Model)" die Anführungszeichen nicht korrekt escaped.
Wie kann ich das Problem beheben?

16.828 Beiträge seit 2008
vor 7 Jahren

Dir ist schon bewusst, dass man so eigentlich kein Json zum Client schickt, oder?

Ich würde an Deiner Stelle mit Newtonsoft.Json arbeiten, nicht mit dem .NET Framework Json Serializer; der hat paar Macken und ist grässlich langsam.

2.207 Beiträge seit 2011
vor 7 Jahren

Hallo daniel,

wieso willst du das als JSON serialisieren?

Gruss

Coffeebean

16.828 Beiträge seit 2008
vor 7 Jahren

Er hat offensichtlich JavaScript-Code in einer View.
Diesem Code will er ein Json direkt mit übergeben, das vom ViewModel kommt.

Vermutlich will er, wenn ich es jetzt so überlege:

@Html.Raw(Json.Encode(Model.EinText))
_
_daniel_ Themenstarter:in
227 Beiträge seit 2006
vor 7 Jahren

@Abt danke. So funktionierts.

Wie ist sonst der Weg, um die Daten in die View zu bekommen? Also vor allem bei Frameworks wie angular oder react?
Einen zweiten Aufruf eines Services wollte ich mir sparen.

@Abt Du meinst die GetIt ist falsch? Da wird ja eigentlich kein Json geschickt?

16.828 Beiträge seit 2008
vor 7 Jahren

GetIt ist egal, aber eigentlich gehört in eine ASP.NET MVC View kein Json, sondern nur HTML.
Da gehört auch kein JavaScript rein. JavaScript gehört in JavaScript Dateien und nicht eingebettet in divs und Co.

Single Page Applications wie React oder Angular(2) haben gar keinen MVC Anteil mehr, sondern nur noch eine WebAPI, die Json liefert.
Es gibt also keine HTML Views mehr auf der Server-Seite.

Beispiel von Coffeebean dazu: https://github.com/FabianGosebrink/ASPNET-Foodchooser-Cross-Platform-Angular2