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
Dokument mit C# und HTML
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Dann würde ich der Fehlermeldung glauben und das Zeug liegt zur Laufzeit nicht dort, wo gesucht wird.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Ok und hast du eine Idee woran das liegen kann?

Ich bekomme ein ähnliches Problem, dass die View nicht gefunden werden kann, wenn ich es so probiere:
ASP.NET Core Render View to String – Paris Polyzos' blog

Wenn ich den Link von dir probiere:
ASP.NET Core MVC Render View to String

dann bekomme ich diese Fehlermeldung:
Fehler
System.ArgumentNullException: 'Value cannot be null. (Parameter 'context')'

Der aufruf iost jedesmal so: (nur eben andere Methoden)


var result = await viewRendererService.RenderViewToStringAsync("~/EineView.cshtml", model);

Google verrät mir aktuell auch nichts hilfreiches, woran es liegen kann, dass die View nicht gefunden wird. Die View liegt direkt im Projekt und nicht in einem Ordner o.ä.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10068

beantworten | zitieren | melden

Dann solltest Du versuchen zu verstehen was die Directory angaben "~" von Dir bedeutet.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Also was ich gefunden habe, gibt "~" das Root Verzeichnis meiner Applikation in Asp.net an. Heißt von da muss ich nur noch in meine View rein denke ich. Macht es vlt einen Unterschied das ich NetCore3.1 nutze?
Aber auch komplett ohne "~" und nur mit "/" wie in einem Beispiel einer Konsolen App funktioniert es bei mir nicht. Ich hatte auch mal den absoluten Pfad vom C-Verzeichnis probiert.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DerPeter123 am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1796
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Dann müsstest du mal prüfen wo dein Root Verzeichnis liegt.
Es muss nicht zwangsweise im Ordner deiner Anwendung sein.

Ansonsten solltest du auch sicherstellen ggf. mit einem File.Exists ob die View überhaupt Vorhanden ist.
Wenn diese nicht in den Ausgabe bzw. den richtigen Ordner kopiert wird, dann kann es auf deiner Seite auch nur knallen.

Nachtrag:
Damit kannst du im Web Teil deiner Anwendung den Pfad ggf. abfragen.
ASP .NET Core Pfad ermitteln/

T-Virus
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am .
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

ok ich werde mir mal angucken wie ich das root-Verzeichnis prüfe.

Mit File.Exist hat es mit der "~" schreibweise weder bei der View noch bei einer .cs klasse funktioniert. Mit einem Absoluten Pfad hat er beides gefunden.
Habe es dann so nochmal probiert:


 var htmlString = await RazorTemplateEngine.RenderAsync("C:/weitereOrdner/EineView.cshtml", model);

Und dann findet er die View wieder nicht. Vlt klappt es auch nicht mit absoluten Pfaden und ich muss erst das root Verzeichnis prüfen?

Achja und einen richtigen Webteil habe ich glaube ich nicht. Ich habe eine .NetCore 3.1 consolen App mit verschiedenen Services, einem Model und einer View
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DerPeter123 am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

~/ ist die relative Darstellung zum Projektverzeichnis.
Bei "~/EineView.cshtml muss die Datei also im Hauptverzeichnis des Projekts liegen - und beim Deployment auch kopiert werden (Rechtsklick -> Properties).

Man muss niemals bei Razor irgendwie den Pfad manuell auflösen.
Den Link von T-Virus kann man daher ignorieren; das ist für dieses Thema hier irrelevant.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

@Abt
du meinst vermutlich dass ich eine Build action einstellen muss? Habe da ein paar die für mich aus der Doku heraus sinn gemacht haben ausprobiert, bisher habe noch nichts gefunden was funktioniert.

Ansonsten zu Razor Light:
Es funktioniert zwar bei einer "leeren" consolen app, aber wenn ich meinen Quellcode der ein Array anhand verschiedener Eingaben erstellt, davor ausführe bekomme ich später beim templaten diese Meldung:
Fehler
System.TypeLoadException: 'Could not load type 'Microsoft.Extensions.Primitives.InplaceStringBuilder' from assembly 'Microsoft.Extensions.Primitives, Version=5.0.0.0, Culture=neutral,
Dazu habe ich auch folgendes gefunden: https://github.com/toddams/RazorLight/issues/365
Das hilft mir aber leider nicht, da ich den InplaceStringBuilder eig. nicht verwende. Und selbst wenn, dürfte das eig keine Auswirkung auf das rendern des Templates haben.

Mein Code sieht inetwa so aus:


var liste = host.CreateDefaultBuilder.GetRequiredService<Service>().Run();

var engine = new RazorLightEngineBuilder()
	.UseFileSystemProject("C:/RootFolder/With/YourTemplates")
	.UseMemoryCachingProvider()
	.Build();

var model = new {Name = "John Doe"};
string result = await engine.CompileRenderAsync("./View.cshtml", model);

Beim ausführen der CompileRender Methode kommt dann eben der obengenannte Fehler.
Wenn ich hingegen eine leere Anwendung erstelle ohne meinen Quellcode klappt es. Und ich finde es sehr merkwürdig das es nicht mehr klappt obwohl ich die Liste die oben zurück kommt gar nicht weiter nutze
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Zitat von DerPeter123
@Abt
du meinst vermutlich dass ich eine Build action einstellen muss? Habe da ein paar die für mich aus der Doku heraus sinn gemacht haben ausprobiert, bisher habe noch nichts gefunden was funktioniert.
achso das "copy to output diirectory" property hatte ich auch probiert. Hatte aber nichts geändert. Daher dachte ich das die Build action vlt noch eine andere Einstellung brauchte.

private Nachricht | Beiträge des Benutzers