Heim >Backend-Entwicklung >C++ >Wie rendere ich Ansichten als Zeichenfolgen in .NET Core?

Wie rendere ich Ansichten als Zeichenfolgen in .NET Core?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 19:05:40335Durchsuche

How to Render Views as Strings in .NET Core?

Ansicht als String in .NET Core zurückgeben

Problem:

Viele verfügbare Artikel bieten Anleitung zum Rendern von Ansichten in Zeichenfolgen in ASP.NET, jedoch nicht speziell für .NET Core. Die .NET Core-Implementierung löst trotz Konvertierungsversuchen Kompilierungsfehler aus.

Using-Anweisungen:

Um dieses Problem zu beheben, sind die folgenden Using-Anweisungen erforderlich:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System.IO;
using System.Threading.Tasks;

Project.json-Abhängigkeiten:

Die entsprechenden project.json-Abhängigkeiten sind:

{
  "dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.1.0",

    ...
  },
}

Controller-Erweiterungsmethode:

Die folgende Erweiterungsmethode kann implementiert werden, um Ansichten als Zeichenfolgen in .NET Core zu rendern:

public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
    if (string.IsNullOrEmpty(viewName))
    {
        viewName = controller.ControllerContext.ActionDescriptor.ActionName;
    }

    controller.ViewData.Model = model;

    using (var writer = new StringWriter())
    {
        IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
        ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);

        if (viewResult.Success == false)
        {
            return $"A view with the name {viewName} could not be found";
        }

        ViewContext viewContext = new ViewContext(
            controller.ControllerContext,
            viewResult.View,
            controller.ViewData,
            controller.TempData,
            writer,
            new HtmlHelperOptions()
        );

        await viewResult.View.RenderAsync(viewContext);

        return writer.GetStringBuilder().ToString();
    }
}

Verwendungsbeispiel:

Die Erweiterungsmethode kann aufgerufen werden aus einem Controller heraus mit der folgenden Syntax:

viewHtml = await this.RenderViewAsync("Report", model);

Für eine Teilansicht:

partialViewHtml = await this.RenderViewAsync("Report", model, true);

Diese Lösung bietet eine starke Typisierung für das Modell, Fehlerbehandlung beim Suchen der Ansicht und asynchron Betrieb.

Das obige ist der detaillierte Inhalt vonWie rendere ich Ansichten als Zeichenfolgen in .NET Core?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn