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
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

Dokument mit C# und HTML

beantworten | zitieren | melden

Hallo

Ich versuche aktuell HTML Dokumente mit C# zu erzeugen. Mein Problem ist dabei, dass ich noch auf der suche nach einer für mich gut geeigneten HTML Template Engine bin.
Über den C# code genieriere ich mir eine Liste mit Objekten einer Klasse. In dieser Klasse speichere ich mir die Werte die ich im HTML Dokument anzeigen möchte. Dabei können es jedes mal beim erzeugen des Dokumentes verschiedene Anzahlen an Objekten und die Objekte können hierachisch untereinander angeordnet sein. Ein Beispiel für eine solche Liste wäre: [Automarke, VW, Porsche, Tesla, Motorradmarke, BMW, Ducati, Kawasaki] (in der liste sollen das Objekte sein die dann immer noch weitere angaben besitzen wie Preis etc.

Das HTML dokumeent soll dann so aufgebaut sein:
Alle infos zum Objekt Automarke
  • Alle Infors zum Objekt VW
  • Alle Infors zum Objekt Porsche
  • Alle Infors zum Objekt Tesla

Alle infos zum Objekt Motorradmarke
  • Alle Infors zum Objekt BMW
  • Alle Infors zum Objekt Ducati
  • Alle Infors zum Objekt Kawasaki

Also wie eine Hierarchie. Mein 2. HTML Dokument könnten dann vlt noch Fahrradmarken mit drin stehen und 5 Automarken oder ähnliches.
Zusätzlich soll es möglich sein ein Logo oder so in dem Dokument anzeigen zu können, damit es etwas sdchöner aussieht. Also CSS würde ich auch gerne nutzen denke ich.
Ich hoffe man versteht wie ich das meine

Eine möglichkeit wäre natürlich den HTML Code in einem String zu speichern, ist aber glaube ich eher unschön. (Und Css dann vlt nicht möglich?)
Hat jemand eine Idee was man für sowas nutzen kann? Razor sah mir ein bisschen zu kompliziert dafür aus und ich bin mir nichtmal sicher ob ich das dafür verwenden kann.
Die andere Option die ich gefunden habe war Handlebars aber das sah so aus das wäre es vor allem mit JavaScript gut und nicht unbedingt mit C#.

Ich hoffe mir kann jemand weiterhelfen, eine gute Hilfe für das Templating empfehlen und vlt auch ein paar Vorteile nennen, die ich gegenüber eines einfachen strings habe.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



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

beantworten | zitieren | melden

Wie sieht den deine Anforderung genau aus?
Willst du hier eine Webseite entwickeln mit dynamischen Daten z.B. aus deiner Datenbank?
Dann solltest du dir anschauen, wie man mit C# und .NET Webseiten entwickelt.

Wenn die Informationen komplett statisch sind, reicht es einmalig Html Dateien zu erzeugen und auf einem einfachen Webserver abzulegen.
Hier müsstest du deine Anforderungen bzw. dein eigentliches Ziel mal genauer erläutern.
Html Dateien kannst du sonst auch simpel mit einem Editor zusammen bauen.

T-Virus
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
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Zitat von DerPeter123
Ich versuche aktuell HTML Dokumente mit C# zu erzeugen. Mein Problem ist dabei, dass ich noch auf der suche nach einer für mich gut geeigneten HTML Template Engine bin.
Die Standard Engine von ASP.NET nennt sich Razor. Wir generieren auf dieser Engine zum einen den HTML Code des Forums (als Teil der ASP.NET Render Pipeline) und zum anderen auch den HTML-Code der E-Mails (ohne ASP).
Dazu braucht man auch kein extra NuGet Paket mehr, nur noch IRazorViewEngine Interface (Microsoft.AspNetCore.Mvc.Razor)

Ansonsten gibts statische Code Generatoren wie https://wyam.io/
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Danke schonmal für die Antworten. Es hat nichts mit einem Webserver zutun. Es sollen HTML Dokumente erzeugt werden die in einem lokalen File abgelegt werden und im Browser angezeigt werden können. Mein Problem bissher ist nur das ich nichts gefunden habe oder nicht gefunden habe wie es geht, mit den Template engines die Liste die ich habe mit einer Schleife zu durchlaufen und für jeden Eintrag in der Liste HTML Code mit den Informationen aus dem Objekt der Liste zu erzeugen.
Also ich dachte mir, dass ich vlt ein HTML file erstelle mit Header und Body und so generelle sachen, und im Body bereich vlt mit irgeneiner Biblothek oder so angeben kann das ich an der Stelle etwas einfügen möchte. Und dann durchlaufe ich in meiner C# Methode die Liste und erzeuge dort auch den HTML Code (das wäre dann nur noch <h1>Tesla</h1><p>Kostet 50.000 Eurp</p>). Und diesen kann ich dann in das HTML File einfügen.

Die andere Idee wäre ich mache:


           StringBuilder sb = new StringBuilder();
            sb.Append("<head></head>");
            sb.Append("<body>");
            foreach (var liste in array)
            {
                sb.Append("<p>liste.beschreibung</p>" + "<br>");
            }
            sb.Append("</body>");

            var htmlCode = sb.ToString();
            File.WriteAllText(@"C:\Files\Marken.htm", htmlCode);

Wenn ich das so mache, kann ich aber vermutlich kein Css nutzen?

Ich hoffe mein "Problem" ist jetzt etwas verständlicher.

PS: Razor etc. habe ich für mich als etwas übertrieben angesehen, weil ich ja nur ein HTML file brauche das grundsätzlich immer gleich ist, nur eben durch den Inhalt der Liste, der unterschiedlich sein kann, sich unterschiedet. Und evtl. verschiedene im Header oder so (aber das ist eher neben sache)
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

PPS: Eventuell ist mein Thema auch im bereich "Webtechnologien" falsch, aber ich dachte ich wäre hier richtig, weil HTML ja eine Webtechnolgie ist ^^
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Wie ich in meinem Beitrag geschrieben hab ist weder die RazorEngine Web-only noch der statische Code-Generator.
Du baust nun halt mit dem Stringbuider auch nichts anderes als einen statischen Code-Generator; halt von Grund auf neu und ohne Features.
Klar, kannst so machen: einfaches String Replacement - kein Templating.

Aber Deine Frage war ja, was es es an Generatoren gibt.
Zitat
Wenn ich das so mache, kann ich aber vermutlich kein Css nutzen?
CSS kannst Du immer nutzen, wenn der Client das zusammen mit HTML versteht.
Mit dem Generieren hat das nichts zutun.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

ok das heißt auch mit Razor kann ich mir ein HTML File erzeugen und das als HTML Dokument local speichern?

https://wyam.io/ wurde glaube ich in Statiq - Your Imagination, Your Generator umgenannt wenn ich das richtig sehe. und Statiq - Your Imagination, Your Generator scheint leider nicht Kommerziell nutrzbar.
Eigentlich hätte ich gerne etwas was open source ist und für alles mögliche verwendet werden kann. d.h. es bleibt nur noch Razor übrig.
Dann werde ich nochmal nach Razor Tutorials gucken. Hatte bisher nur welche gefunden zum erstellen von Websites.

Letzte Frage: Lohnt es sich bzw. ist es viel aufwand sich Razor anzueignen für meinen Anwendungszweck, wenn man noch nie etwas mit HTML / CSS und Razor gemacht hat?
Vielen Danke aufjedenfall schonmal
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Nur weil es Open Source ist darfst noch lange nicht alles damit machen.
Das kommt auf die Lizenz an.

Statiq Framework ist MIT lizenziert; also kommerziell verwendbar.

Razor ist nur eine Templatingsprache.
Und irgendeine musst lernen, wenn Du Templating verwenden willst.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Ok wenn ich das mit Razor richtig verstanden habe, erstelle ich ein cshtml file und schreibe mit der @ Notation meinen Code, also in meinem Fall die Schleife für die Liste?
Wie bekomme ich denn dann meine Liste in das cshtml file?

Hast du vlt ein Tutorial oder Beispiel wo etwas ähnliches gemacht wird wie bei mir?
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10065

beantworten | zitieren | melden

Dafür ist toddams/RazorLight geeignet.
Gibt auch genug Beispiele wie man das benutzen kann.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

RazorLight braucht man nicht mehr; man braucht wie gesagt nur noch die Engine.
Kann man natürlich trotzdem verwenden, wenn man will.

Erster Google Treffer: ASP.NET Core MVC Render View to String


public class ViewRendererService : IViewRendererService
{
    private readonly IRazorViewEngine _razorViewEngine;
    private readonly ITempDataProvider _tempDataProvider;
    private readonly IActionContextAccessor _actionContextAccessor;

    public ViewRendererService(IRazorViewEngine razorViewEngine,
        ITempDataProvider tempDataProvider,
        IActionContextAccessor actionContextAccessor)
    {
        _razorViewEngine = razorViewEngine;
        _tempDataProvider = tempDataProvider;
        _actionContextAccessor = actionContextAccessor;
    }


    public async Task<string> RenderViewToStringAsync(object model)
    {
        var actionName = _actionContextAccessor.ActionContext.ActionDescriptor.RouteValues["action"];
        return await RenderViewToStringAsync(actionName, model);
    }

    public async Task<string> RenderViewToStringAsync(string viewPath, object model)
    {
        var actionContext = _actionContextAccessor.ActionContext;
        var viewEngineResult = _razorViewEngine.FindView(actionContext, viewPath, false);

        if (viewEngineResult.View == null || (!viewEngineResult.Success))
        {
            throw new ArgumentNullException($"Unable to find view '{viewPath}'");
        }

        var view = viewEngineResult.View;
        var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), actionContext.ModelState);
        viewDictionary.Model = model;
        var tempData = new TempDataDictionary(actionContext.HttpContext, 
            _tempDataProvider);

        using (var sw = new StringWriter())
        {
            var viewContext = new ViewContext(actionContext, view, viewDictionary, tempData, sw, new HtmlHelperOptions());
            await view.RenderAsync(viewContext);
            return sw.ToString();
        }
    }
}

Wir verwenden das in sehr ähnlicher Form.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10065

beantworten | zitieren | melden

Und das kann man so in einer Desktop App ( Forms / WPF ) benutzen?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Ja, nicht so bequem wie RazorLight; aber wenn Du keine Drittabhängigkeiten willst, dann geht das.
private Nachricht | Beiträge des Benutzers
david.m
myCSharp.de - Member



Dabei seit:
Beiträge: 108

beantworten | zitieren | melden

Wir verwenden für HTML E-Mails scriban. Ist zwar eine andere Syntax als Razor, aber ggf. einfacher.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von david.m am .
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Also Scriban klingt erstmal sehr verständlich aber ich habe noch nicht den Vorteil dazu gefunden, als wenn ich einfach HTML code in einem normalen String speichere. Also es ist etwas einheitlicher in HTML Code und nicht so sehr C# mit HTML vermischt?

Also der Methode "RenderViewToStringAsync" gebe ich den Pfad des HTML files als Parameter mit und dann wird das zu String gerendert?
Und im HTML file kann ich dann über die Razor Syntax mein Document erstellen. Aber wie bekomme ich z.B. die Liste mit den Werten die ich im HTML Document anzeigen möchte, in das HTML file?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Zitat von DerPeter123
Aber wie bekomme ich z.B. die Liste mit den Werten die ich im HTML Document anzeigen möchte, in das HTML file?
Also wenn Du Templating verwenden willst, dann musst Dir halt auch den jeweiligen Syntax anschauen.
Im Falle von Razor übergibt man den Views entsprechend Modelle, die den Inhalt haben, der in das HTML eingebettet werden soll.
Razor ist extrem gut dokumentiert, zB. als Teil der Razor Pages: Teil 2: Hinzufügen eines Modells
Zitat von DerPeter123
Also es ist etwas einheitlicher in HTML Code und nicht so sehr C# mit HTML vermischt?
Es ist ein Templating-Framework; also das, wonach Du gefragt hast.
Zitat von DerPeter123
aber ich habe noch nicht den Vorteil dazu gefunden, als wenn ich einfach HTML code in einem normalen String speichere.
Das ist kein Templating Framework. Das ist halt String-Replace.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Hallo nochmal

Inzwischen habe ich ein bisschen mit Razor Pages in einer Webapplication herumgetestet.
Allerdings würde ich gerne Razor Pages in einer Consolen App nutzen. Ich habe dazu eine .cshtml und eine .cshtml.cs datei erstellt und es stößt auch erstmal auf keine fehler.
Was mich aber wundert, ist z.B. das bei der Webapp in der Startup von Anfang an AddRazorPages zum service hinzugefügt wird. Ist sowas in der Consolen App auch notwendig oder reicht es eine .cshtml und eine .cshtml.cs datei zuerstellen? Anschließend würde ich das .cshtml file gerne zu einem String rendern. Dazu habe ich auch schon eine Bibliothek gefunden.
Diese: https://github.com/soundaranbu/RazorTemplating
Gibt es da vlt auch noch bessere Möglichkeiten?

Viele Grüße
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 351
Herkunft: Kassel

beantworten | zitieren | melden

Fun Fact: Eine ASP.NET Core / 5 Anwendung ist auch eine Konsolenapplikation

Schau mal, was Abt oben geschrieben hat. Mit den Infos solltest du problemlos jede Menge Anleitungen finden, wie das in einer Console ohne ASP funktioniert
Zitat von Abt
Die Standard Engine von ASP.NET nennt sich Razor. Wir generieren auf dieser Engine zum einen den HTML Code des Forums (als Teil der ASP.NET Render Pipeline) und zum anderen auch den HTML-Code der E-Mails (ohne ASP).
Dazu braucht man auch kein extra NuGet Paket mehr, nur noch IRazorViewEngine Interface (Microsoft.AspNetCore.Mvc.Razor)


private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Auf der Seite: IRazorViewEngine Interface (Microsoft.AspNetCore.Mvc.Razor)
steht: "An IViewEngine used to render pages that use the Razor syntax."

Ist mit dem rendern gemeint, um hinterher aus der View (.cshtml) z.B. einen string zuerzeugen oder ist das Interface notwendig, um überhaupt razor zum templaten nutzen zu können? Das würde dann ja bedeuten das ichj nicht einfach eeine View (.cshtml) und ein Model (.cshtml.cs) in meiner consolen app hinzufügen kann?

Aber so wie ich das verstehe, funktioniert das mit dem hinzufügen eines models und einer view und die view kann ich dann mit dem interface zu einem string rendern?
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10065

beantworten | zitieren | melden

Hast Du Dir denn mal Razorlight angeschaut?
https://github.com/toddams/RazorLight


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

var model = new {Name = "John Doe"};
string result = await engine.CompileRenderAsync("Subfolder/View.cshtml", model);
Ist nun doch nicht wirklich viel
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

@Fzelle: So wie ich das verstehe erstelle ich ein cshtml file in dem ich mit der normalen Razor syntax templaten kann und über @Model.name z.B. einen namen hinzufügen kann?
Dem Model kann ich dann über


var model = New ModelName
{
       name = "test"
};
werte zuweisen und mit


string result = await engine.CompileRenderAsync("Subfolder/View.cshtml", model);

kann ich dann meine view mit den werten des models zu einem String rendern?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Ja, sieht man doch allein an der Rückgabe.

Wie wärs wenn Du einfach mal die Tipps annimmst, Dir das anschaust und es einfach mal ausprobierst...?
Wir programmieren das nicht für Dich, denke, da hast Du Verständnis für :-)
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

natürlich habe ich da verständnis für

Mein Ziel war nur ein Ja oder Nein auf meine Frage zu bekommen, ob ich es so richtig verstanden habe. Ich war mir nur recht unsicher ob ich es richtig verstanden hatte.
Werde es nun in den nächsten Tagen mal selber ausprobieren
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



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

beantworten | zitieren | melden

Und böse gesagt hättest du dir das ja oder nein auch selbst durch ein Testprojekt holen können.
Da musst du keine Zeit auf Rückmeldungen warten vergeuden.

T-Virus
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

So ich habe das ganze getestet aber ein paar kleine Fehler sind dabei aufgetreten, für die ich keine Lösung weiß


using System;
using System.Threading.Tasks;
using RazorLight;

namespace ConsoleApp3
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

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

            var myModel = new MyModel()
            {
                Name = "Peter",
                Age = 2
            };
            string result = await engine.CompileRenderAsync("./MyView.cshtml", myModel);
        }
    }
}


using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp3
{
    class MyModel 
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }
}


@model ConsoleApp3.MyModel

<p>Hello, my name is @Model.Name and I am @Model.Age </p>


<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.RazorPages" Version="2.2.5" />
    <PackageReference Include="RazorLight" Version="1.1.0" />
  </ItemGroup>

</Project>

Fehler
CS0060 Inkonsistenter Zugriff: Basisklasse "RazorPage<MyModel>" ist weniger zugreifbar als Klasse "_MyView".
CS0053 Inkonsistenter Zugriff: Eigenschaftentyp "IHtmlHelper<MyModel>" ist weniger zugreifbar als Eigenschaft "_MyView.Html".


Also die ersten beiden Fehler werden vermutlich kommen, weil ich kein public etc in meiner View habe? Aber os wie ich das verstanden habe erstelle ich die View so. Oder verwechsel ich da Razor Pages und RazorLight?

Hat jemand für mich eine Lösung?

PS: jetzt auch mit richtigen fehlermeldungen

PPS: einen Fehler habe ioch behoben. Ich hatte wohl das faslche Package installiert
Dieser Beitrag wurde 6 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

Für Compiler Errors kannst Du einfach die Hilfe aus dem Error Window verwenden.
Dann kommst auf die Dokumentation, die erklärt, wo das Problem ist. Siehe auch [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

In diesem Fall ist Deine Klasse private. Sie muss aber public sein (wie es in der Fehlermeldung auch steht).
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Da ich meine letzte Nachricht nicht mehr editieren kann: Hat sich alles geklärt. War natürlich ein super dummer Fehler... Habe tatsächliuch das public vor der class vergessen. Bin davon ausgegangen, dass das direklt automatisch passiert.

Habe jetzt auch zum Testen noch hinzugefügt, dass ich den String als html file auf dem Desktop speichern kann. Das hat auch soweit funktioniert. Vielen Dank für die nette und schnell Hilfe. Und sorry, wenn ich vlt etwas genervt habe
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DerPeter123 am .
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Ok sorry ich hätte doch noch eine weitere Frage, vlt kann mir ja nochmal jemand helfen

Ich habe nochmal versucht mit dieser Bibliothek die View zu einem string zu rendern: https://soundaranbu.medium.com/render-razor-view-cshtml-to-string-in-net-core-7d125f32c79

Meine Main hat sich so verändert:


        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var myModel1 = new MyModel()
            {
                Name = "Peter",
                Age = 22
            };

            var html = await RazorTemplateEngine.RenderAsync("./MyView.cshtml", myModel1);
        }

Model:


    public class MyModel
    {
        public string Name { get; set; }

        public int Age { get; set; }    
    }

View:


@page
@model ConsoleApp3.MyModel

<p>@Model.Name</p>

Wenn ich das ganz ausführe bekomme ich folgende Fehlermeldung:
Fehler
System.InvalidOperationException: "Unable to find view './MyView.cshtml'. The following locations were searched:
/MyView.cshtml

Eigentlich wundert es mich das der die View nicht findet weil mit Razorlight hat es über den selben Pfad geklappt. Ich habe alle Files einfach in der ConsoleApp erstellt. Also keine Ordner oder so.
An der fehlenden DI kann das nicht liegen oder?

Vielen Dank
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Nur weil eine Pfadangabe mit Lib A funktioniert heisst das nicht, dass das auch mit Lib B funktioniert.
Die echte Razor SDK Engine arbeitet mit ~/Filename.cshtml Angaben, und nicht mit ./Filename.cshtml, was Du auch Deinem Medium-Link und den Razor Docs entnehmen kannst.
private Nachricht | Beiträge des Benutzers
DerPeter123
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Achso ja das habe ich vergessen zuerwähnen. Bei ~ statt Punkt kommt eine ähnliche Fehlermeldung.
Fehler
System.InvalidOperationException: "Unable to find view '~/MyView.cshtml'. The following locations were searched:
~/MyView.cshtml

private Nachricht | Beiträge des Benutzers