代码之家  ›  专栏  ›  技术社区  ›  labilbe

如何从数据库动态加载ASPX代码?

  •  2
  • labilbe  · 技术社区  · 16 年前

    我把这样的内容存储在数据库中

    <p>This a sample text. <%= Html.ActionLink("test", "myaction", "mycontroller") %></p>
    

    内容是我的数据存储库的一部分,这也是我希望将其保存在数据库中的原因。 我想知道如何在编译时呈现和执行它。

    我正在ASP.NET MVC项目中使用它。

    谢谢您。

    2 回复  |  直到 13 年前
        1
  •  1
  •   enorl76    13 年前

    你可以使用 VirtualPathProvider 我相信从框架2.0开始。

    您可以构建一个新的类,ASP.NET运行时将仅对每个请求进行查询。保持这个类的严密性是很重要的,如果您说要从数据库中提取,我绝对建议实现您的系统,将这些文件本地加载到Web服务器上,而不是针对每个请求访问数据库。此外,当您从数据库中提取该文件时,运行时可能会决定编译它…你也不希望每一个请求都发生这种情况。

    但要回答你原来的问题,它是 虚拟路径提供程序 你要找的。如果需要的话,还可以使用它从程序集资源中提取。

        2
  •  3
  •   p.campbell    16 年前

    听起来您有一行标记和源代码作为字符串存储在数据库表中的某个位置?

    您是否考虑将数据/代码/值移动到 Web.CONFIG 相反?

    考虑将环境配置设置存储在web.config中。即

     <appSettings>
       <add Name="IsProduction" value="true" />
       <add Name="RequiresSecure" value="true" />
    

    控制器和模型可以读取这些值,并将环境设置传递给视图。

    当您写出这些常见问题条目时,您可以使用简单的 if .

    <% if (Model.IsProduction) //have your ViewModel pass along whether you're in Production mode, Dev mode, URLs to have SSL, or whatever criteria you like, etc.
    {%>
        <!-- my production markup, with image URL, SSL'd etc. -->
        <img src="https://mysite.com/img.png" />
    <%}
    else  {%>
    
        <!-- my other Dev markup, with image URL, etc. -->
        <img src="https://myDevServer/img.png" />
    <%} %>
    

    将代码保存在数据库中通常被认为是一种糟糕的做法,甚至是dub tee eff。考虑“在数据库中保留数据”规则。