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

时间:2010-03-31 22:14:19

标签: asp.net-mvc dynamic dynamic-compilation

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

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

内容是我的数据存储库的一部分,这就是我想将它保存在数据库中的原因。 我想知道如何在编译时渲染它并执行它。

我在asp.net mvc项目中使用它。

谢谢。

2 个答案:

答案 0 :(得分:3)

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

您是否考虑过将该数据/代码/值移至 web.config

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

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

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

当您写出这些FAQ条目时,您可以使用简单的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。考虑“在数据库中保存数据”的规则。

答案 1 :(得分:1)

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

您可以构建一个ASP.Net运行时将查询几乎每个请求的新类。保持这个课程非常重要,如果你说你要从数据库中拔出,我肯定会建议你实现你的系统将这些文件本地加载到web服务器上,而不是每次请求都会打到数据库。此外,当您从数据库中提取该文件时,运行时可能会决定编译它...并且您也不希望每次请求都发生这种情况。

但是要回答你原来的问题,那就是你正在寻找的VirtualPathProvider。如果需要,您也可以使用它来从装配资源中提取。