Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析html帮助程序_C#_Razorengine - Fatal编程技术网

C# 解析html帮助程序

C# 解析html帮助程序,c#,razorengine,C#,Razorengine,我正在使用从数据库动态编译razor视图。现在我正在使用剃须刀引擎3.7.3。我很少看到关于如何阅读html助手并编译它的帖子,但这是针对razor引擎的旧版本 我读过ITemplateServiceConfiguration,但我也不能真正理解它是如何工作的 我的问题是,如何在数据库的Html内容中使用@Html(Html helper)、@Url(Url helper)和@section(如@section脚本,@section特色)成功运行compile()razorengine(v3.7

我正在使用从数据库动态编译razor视图。现在我正在使用剃须刀引擎3.7.3。我很少看到关于如何阅读html助手并编译它的帖子,但这是针对razor引擎的旧版本

我读过
ITemplateServiceConfiguration
,但我也不能真正理解它是如何工作的

我的问题是,如何在数据库的Html内容中使用@Html(Html helper)、@Url(Url helper)和@section(如@section脚本,@section特色)成功运行compile()razorengine(v3.7.3)?

到目前为止我所做的事情。我试图实现另一篇文章中的代码。该代码适用于较旧版本的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;
        }
    }
}

以上代码来自

我不完全确定我的建议是否能直接解决您的问题。根据我的专业经验,尝试利用不推荐的类并不会产生积极的结果。我个人不会尝试直接从数据库渲染视图。如果我处在您的位置,利用MVC4的razor视图引擎,我将放弃您的方法,遵循以下步骤

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

    <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>
    
    
    
  • 在HTMLHelpers命名空间类中,创建MVCHtmlString或其他MVC方法,这些方法获取数据库模型参数,并将它们转换为工作正常的HTML/JSON或XML。在局部视图和主视图中引用这些自定义HTML帮助程序

  • 如果您以这种方式实现HTMLHelper,那么您将使用访问数据并将结构化数据库数据转换为可视HTML的逻辑来抽象JIT编译的代码(所有视图代码)。在上面的示例中,您将在运行时JIT编译视图的大部分逻辑,这在性能方面非常昂贵。MVC是以这样一种方式设计的,这样您就可以避免承担所有这些开销。如果您在预编译库中创建了功能强大的HTML帮助程序,则可以使视图代码变得非常小和简单

    你能展示一下到目前为止你做了什么吗?好让我们能帮你更好。好的,我编辑了它,请审阅。可能是重复的
    ITemplate template = RazorEngine.Razor.Resolve(viewName);
    ExecuteContext ec = new ExecuteContext();
    RawString result = new RawString(template.Run(ec));
    
    <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>