本文介绍了如何在启用静电文件的剃须刀中用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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!