.NET Core에서 문자열로 보기 반환
문제:
사용 가능한 많은 기사에서 ASP.NET에서 뷰를 문자열로 렌더링하는 방법에 대한 지침(.NET Core에 대한 지침은 아님) .NET Core 구현은 변환 시도에도 불구하고 컴파일 오류를 트리거합니다.
문 사용:
이 문제를 해결하려면 다음 using 문이 필요합니다.
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 종속성:
해당 project.json 종속성은 다음과 같습니다.
{ "dependencies": { "Microsoft.AspNetCore.Mvc": "1.1.0", ... }, }
컨트롤러 확장 방법:
다음 확장 방법은 다음과 같습니다. .NET에서 뷰를 문자열로 렌더링하도록 구현되었습니다. 핵심:
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);
부분 보기의 경우:
partialViewHtml = await this.RenderViewAsync("Report", model, true);
이 솔루션은 모델에 대한 강력한 유형 지정, 오류 처리 기능을 제공합니다. 뷰 찾기 및 비동기 작업이 가능합니다.
위 내용은 .NET Core에서 뷰를 문자열로 렌더링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!