c# - 在 C# 中生成 HTML 页面 - 最佳实践

标签 c# html

我必须在我的 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 项目中的所有内容)获得的所有功能:

  1. 创建一个 ASP.NET MVC 项目。
  2. 像创建 MVC View 一样创建 View 。
  3. 一旦您对外观感到满意,然后创建另一个应用程序(控制台、Windows 窗体等)并从中引用 MVC 应用程序。
  4. 控制台应用程序可以从 MVC 应用程序获取 View ,而不是使用浏览器。

在下文中,我将假设我们有一个将使用 MVC 应用程序的控制台应用程序。

配置 MVC 应用程序的步骤

这些步骤将预编译您的 View 。因此,稍后我们将能够直接从控制台应用程序访问 View 。

  1. 右键单击您的 MVC 项目并添加以下 NuGet 包:
    1. RazorGenerator.MsBuild
    2. RazorGenerator.Mvc
  2. 打开您的 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 。如果没有失败,则上述步骤之一未按规定完成。如果失败了,那就是好消息。排除错误,重新编译。

配置控制台应用程序的步骤

  1. 右键单击项目并添加 RazorGenerator.Testing .即使我们不进行测试,我们也会使用这个库来生成 View 的 HTML。
  2. 添加对 MVC 应用程序的引用,就像引用 DLL 一样。
  3. 右键单击 MVC 项目引用并选择 View in Object Browser从上下文菜单。您的意见将在 ASP 内命名空间。请记下 View 的名称。
  4. 按照下面的用法 所示创建您的 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/

相关文章:

javascript - 如何在选项标签内添加标签?

html - 是否可以在这个 div 中画线?

javascript - 使用表单输入访问相机并使用网络应用程序立即上传照片

c# - 如何使用 Quartz 调度程序维护作业历史记录

c# - 给定泛型类型参数的类型,动态选择组件的类型

c# - 我应该如何将行为注入(inject)实体

html - SVG Circle 和 box-shadow 动画问题

c# - 具有多种实现的 .NET Core 3.1 中的依赖注入(inject)

c# - 如何在 Dynamics 365 中以编程方式获取营业时间详细信息

javascript 在嵌套数组中查找对象