gpt4 book ai didi

c# - 解析 html 帮助程序

转载 作者:太空狗 更新时间:2023-10-29 19:48:11 28 4
gpt4 key购买 nike

我正在使用 Razor Engine从数据库动态编译我的 Razor View 。现在我正在使用 Razor Engine 3.7.3。我看到很少有关于如何阅读 html 帮助程序和编译它的帖子,但它是针对旧版本的 razor 引擎的。

我已经阅读了有关 ITemplateServiceConfiguration 的内容,但我也无法真正理解它是如何工作的。

我的问题是,如何使用@Html(Html 助手)、@Url(Url 助手)和@section(如@Section 脚本, @Section featured) 在我数据库的 html 内容中?

到目前为止我所做的事情。我试图实现从另一篇文章中获得的代码。该代码适用于旧版本的 Razor 引擎。他建议我们创建自己的助手类:

public class RazorHtmlHelper
{
public IEncodedString Partial(string viewName)
{
ITemplate template = RazorEngine.Razor.Resolve(viewName);

ExecuteContext ec = new ExecuteContext();

RawString result = new RawString(template.Run(ec));

return result;
}
}

public class RazorUrlHelper
{
public string Encode(string url)
{
return System.Uri.EscapeUriString(url);
}
}

然后他建议创建我们自己的模板:

public class RazorTemplateBase<T> : TemplateBase<T>
{
private RazorUrlHelper _urlHelper = new RazorUrlHelper();

private RazorHtmlHelper _htmlHelper = new RazorHtmlHelper();

public RazorUrlHelper Url
{
get
{
return this._urlHelper;
}
}

public RazorHtmlHelper Html
{
get
{
return this._htmlHelper;
}
}
}

在解析之前,我们需要设置我们的配置:

Razor.SetTemplateService(new TemplateService( new TemplateServiceConfiguration()
{
BaseTemplateType = typeof(RazorTemplateBase<>)
};
));

result = RazorEngine.Razor.Parse(templateText, model);

RazorUrlHelper 没有问题,但 RazorHtmlHelper 无法正确读取这些代码,因为它已被弃用:

ITemplate template = RazorEngine.Razor.Resolve(viewName);
ExecuteContext ec = new ExecuteContext();
RawString result = new RawString(template.Run(ec));

以上代码来自this post

最佳答案

我不完全确定我的建议是否会直接解决您的问题。根据我的专业经验,尝试利用已弃用的类不会产生积极的结果。我个人不会尝试直接从数据库呈现 View 。如果我处在您的位置,利用带 MVC4 的 Razor View 引擎,我会放弃您的方法,请按照以下步骤操作。

  1. 右键单击您的项目并使用 nuget 将 MVC4 和所有包含的 js/dll/库更新到最新版本。
  2. 创建包含变量的模型对象集,以存放您将从数据库中提取的所有信息。利用继承或以这样一种方式设计它们,以便在每个请求的基础上有效地使用它们。
  3. 为您的 MVC 项目构建主视图和部分 View ,以最有效地防止任何重复的前端代码。如果这些 View 主要返回 HTML 响应,请将 Controller 操作设置为指向应用程序主视图的 ActionResult()。在这些 Controller 操作中,使用数据库所需的所有数据填充您的模型对象,并将填充的模型对象传递给您的主视图。
  4. 在您的局部 View 和主视图中,您可以将此模型对象定义为 View 顶部的主模型,并将模型变量作为参数传递给您的 HTMLHelpers。
  5. 创建将这些模型变量作为参数的 HTML Helper 对象,并在 Views/web.config 文件中定义它们的命名空间。在此示例中,我使用了 namespace System.Web.HtmlHelpers。如果您不这样做,您将无法在您的 View 中利用基本命名空间之外的任何自定义助手。

    <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization"/>
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.HtmlHelpers" />
    </namespaces>
    </pages>
    </system.web.webPages.razor>
    1. 在您的 HTMLHelpers 命名空间类中,创建 MVCHtmlString 或其他 MVC 方法,这些方法采用您的数据库模型参数并将它们转换为工作和运行的 HTML/JSON 或 XML。在您的部分 View 和主视图中引用这些自定义 HTML 帮助器。

如果您以这种方式实现您的 HTMLHelpers,您将使用访问数据并将结构化数据库数据转换为可查看 HTML 的逻辑抽象出您的 JIT 编译代码(所有 View 代码)。在上面的示例中,您将在运行时通过 JIT 为您的 View 编译大部分逻辑,这在性能方面非常昂贵。 MVC 的设计方式使您可以避免承担所有这些开销。如果您创建存在于预编译库中的强大的 HTML 帮助程序,您可以使您的 View 代码变得非常小和简单。

关于c# - 解析 html 帮助程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565572/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com