컨트롤러 확장을 사용하여 .NET Core에서 뷰를 문자열로 렌더링
이 문서의 목적은 뷰를 렌더링하기 위한 기존 코드를 .NET Core와 원활하게 작동하도록 ASP.NET의 문자열을 사용합니다.
제공된 코드는 컨트롤러 메서드 호출을 가정합니다. RenderViewToString 메서드. 그러나 이를 .NET Core에 적용하면 컴파일 오류가 발생할 수 있습니다. 이 문서에서는 .NET Core용으로 특별히 설계된 코드의 수정된 버전을 제공합니다.
수정된 코드:
다음 코드 조각은 다음과 같이 RenderViewToString 메서드의 향상된 버전을 제공합니다. 컨트롤러 확장자:
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; namespace CC.Web.Helpers { public static class ControllerExtensions { 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(); } } } }
사용법:
다음 구문으로 업데이트된 코드를 사용할 수 있습니다.
viewHtml = await this.RenderViewAsync("Report", model);
PartialView:
partialViewHtml = await this.RenderViewAsync("Report", model, true);
참고:
위 내용은 .NET Core 컨트롤러에서 뷰를 문자열로 렌더링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!