如何在启用静电文件的剃须刀中用cshtml模板文件渲染html

How To render HTML with CSHTML Template file in razor with enabled static File(如何在启用静电文件的剃须刀中用cshtml模板文件渲染html)
本文介绍了如何在启用静电文件的剃须刀中用cshtml模板文件渲染html的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我实际上正在从cshtml模板生成一个html文件,用于报告目的。 问题是,当我在cshtml文件中使用CDN链接进行引导时,所呈现的html获得了我设计的所有CSS,但是当使用引导的本地访问时,样式根本不呈现,当试图呈现来自本地文件的图像时也是如此。 以下是生成html文件的代码:
var httpContex = new DefaultHttpContext
            {
                RequestServices=_serviceProvider
            };
            var actionContext = new ActionContext(httpContex, new RouteData(), new ActionDescriptor());
            await using var outputWriter = new StringWriter();
            var viewResutl = _viewEngine.FindView(actionContext, templateFileName, false);
            var viewDictionnary = new ViewDataDictionary<TViewModel>(new EmptyModelMetadataProvider(), new ModelStateDictionary())
            {
                Model = viewModel
            };
            var tempDataDictionnary = new TempDataDictionary(httpContex, _tempDataProvider);
            if (!viewResutl.Success)
            {
                throw new KeyNotFoundException($"could not render the HTML,because {templateFileName} template does not exist");
            }
            try
            {
                var viewContext = new ViewContext(actionContext, viewResutl.View, viewDictionnary, tempDataDictionnary, outputWriter, new HtmlHelperOptions());
                await viewResutl.View.RenderAsync(viewContext);
                return outputWriter.ToString();
            }
            catch(Exception ex)
            {
                _logger.LogError(ex, "Could not render the HTML because of an error");
                return string.Empty;
            }

以下是cshtml文件的一部分:

@model XXXXXReporter.ViewModels.XXXXXModel
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>@Model.title</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-U1DAWAznBHeqEIlVSCgzq+c9gqGAJn5c/t99JyeKa9xxaYpSvHU5awsuZVVFIhvj" crossorigin="anonymous"></script>
    <link rel="stylesheet" href="~/StaticFiles/bootstrap.min.css"/>
</head>
<body style="min-height:100vh">
    <div class="container-fluid" >
        <div class="row">
            <div class="col">
                <h2 class="text-center">XXXX Advanced Reporting System</h2>
            </div>
            <div class="col">
                <img src="~/XXXXlogo.png" alt="ANY IMAGE" />
            </div>
            
        </div >
        <div class="row border border-info border-2 rounded bg-info" style="margin-top: 200px;">
            <h3 class="text-center text-white">General Availabilty And Sensor Status[PRTG]</h3>
        </div>
        <div class="row " style="margin-top: 200px;">
            <p>Period Time:<span>All Period</span></p>
            <p>Report By:<span>XXXX</span></p>
            <p>Creation Date:<span>@DateTime.Now</span></p>
            
        </div>
        <div class="row" style="margin-top: 430px;">
            
                    @foreach (var elem in Model.panelList)
                    {
                        
                                @Html.Raw(elem)
                         
                    }
               
        
    </div>
</body>
</html>

此行代码<link rel="stylesheet" href="~/StaticFiles/bootstrap.min.css"/>从不在呈现html时生成(通过注释其上方的CDN链接) 该项目是一个.net Core Web API,我已经忽略了使用Startup.cs中的以下代码使用静电文件:

app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, @"StaticFiles")),
                RequestPath = "/StaticFiles"
            });

正如我在上一个问题bootstrap and css not working with .net core api中所述,我认为问题出在剃须刀呈现html的方式上。 有没有办法让它呈现我在cshtml文件中传递的静电文件?或者有没有使用.Net core API从模板生成HTML的正确方法? 致以问候,

推荐答案

感谢您的所有答复。 这是由木偶EerSharp无法为静电文件提供服务造成的。 对于CSS,我使用await page.AddStyleTagAsync(new AddTagOptions { Path = "StaticFiles/bootstrap.min.css" });将CSS注入页面。 对于静电图像,我将其编码为base64以使其可从那里显示。

这篇关于如何在启用静电文件的剃须刀中用cshtml模板文件渲染html的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)