我必须在我的 C# 代码中生成一个大的 html 页面(它不是一个站点,只是一个大的单页 html 报告)
页面包含在一页中编译的不同部分。每个部分都包含与其相关的 CSS 样式、javascript 部分和正文。 CSS 样式是静态部分,脚本和正文部分是使用不同的输入数据(csv 文本)生成的。
我第一个简化一体机生成的简单解决方案是创建一个构建器函数:
private static string BuildHtmlPage(string[] cssParts, string[] scriptParts, string[] bodyParts)
{
var htmlPage = "";
htmlPage += @"<!DOCTYPE HTML>
<html>";
htmlPage += "\n<head>";
htmlPage += "\n<style>\n";
foreach (var cssPart in cssParts)
{
htmlPage += cssPart +"\n";
}
htmlPage += "</style>\n";
htmlPage += @"<script type=""text/javascript"">";
htmlPage += "window.onload = function() {";
foreach (var scriptPart in scriptParts)
{
htmlPage += scriptPart + "\n";
}
htmlPage += @"}
</script>";
htmlPage += "\n</head>";
htmlPage += "\n<body>\n";
foreach (var bodyPart in bodyParts)
{
htmlPage += bodyPart + "\n";
}
htmlPage += "\n</body>";
htmlPage += "\n</html>";
return htmlPage;
}
然后生成一个“小”html 部分并像这样使用它:
var htmlResult = BuildHtmlPage(
new [] {style1, style2 },
new [] {script1, script2, script3 },
new [] {body1, body2, body3 }
);
它使我的代码更简洁一些,但它仍然看起来很丑陋且难以维护,因为很多 html 代码混入了 C# 代码。
您有什么想法可以处理这样的任务?首先,我指的是将 html 代码与 C# 分开。
最佳答案
这是一种非常简洁的方法,它将赋予您从 Web 应用程序、HTML 的 Visual Studio 格式化、Razor(基本上是 MVC 项目中的所有内容)获得的所有功能:
- 创建一个 ASP.NET MVC 项目。
- 像创建 MVC View 一样创建 View 。
- 一旦您对外观感到满意,然后创建另一个应用程序(控制台、Windows 窗体等)并从中引用 MVC 应用程序。
- 控制台应用程序可以从 MVC 应用程序获取 View ,而不是使用浏览器。
在下文中,我将假设我们有一个将使用 MVC 应用程序的控制台应用程序。
配置 MVC 应用程序的步骤
这些步骤将预编译您的 View 。因此,稍后我们将能够直接从控制台应用程序访问 View 。
- 右键单击您的 MVC 项目并添加以下 NuGet 包:
打开您的 MVC 项目的
.csproj
记事本中的文件并添加这些元素:1.在最顶层
PropertyGroup
元素,添加<MvcBuildViews>true</MvcBuildViews>
2.在文件末尾添加:
<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target>
3.构建项目。我们需要确保编译了 View 。为了确保它确实被编译,在
.cshtml
中文件写一些不编译的代码。编译时,如果一切设置正确,编译应该会失败,表明编译器也在编译 View 。如果没有失败,则上述步骤之一未按规定完成。如果失败了,那就是好消息。排除错误,重新编译。
配置控制台应用程序的步骤
- 右键单击项目并添加 RazorGenerator.Testing .即使我们不进行测试,我们也会使用这个库来生成 View 的 HTML。
- 添加对 MVC 应用程序的引用,就像引用 DLL 一样。
- 右键单击 MVC 项目引用并选择
View in Object Browser
从上下文菜单。您的意见将在ASP
内命名空间。请记下 View 的名称。 - 按照下面的用法 所示创建您的 View 实例,然后您就完成了。例如,我的 View 名称是
_Views_Test_Index_cshtml
.
如您所见,上面的大部分步骤都只是设置。
用法
我做了一个快速测试,这就是我需要的所有代码:
var view = new ASP._Views_Test_Index_cshtml();
view.ViewBag.Model = new List<string>() { "One", "Two", "Three" };
var html = view.RenderAsHtml();
自 View.Model
是只读的,我用过ViewBag.Model
为 View 设置模型。这是 View :
@{
ViewBag.Title = "Index";
var MyModel = this.ViewBag.Model as List<string>;
}
@for (int i = 0; i < MyModel.Count ; i++)
{
<label>@MyModel[i]</label>
}
这是生成的 HTML:
<label>One</label>
<label>Two</label>
<label>Three</label>
你可以在ViewBag
中传递你需要的任何东西以你的观点。你可能会发现 this article有帮助。
关于c# - 在 C# 中生成 HTML 页面 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50774899/