【问题标题】:How to dynamically load aspx code from a database?如何从数据库中动态加载 aspx 代码?
【发布时间】:2011-02-03 03:39:28
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    但要回答您最初的问题,您正在寻找的是VirtualPathProvider。如果需要,您也可以使用它从程序集资源中提取。

    【讨论】:

      【解决方案2】:

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

      您是否考虑过将这些数据/代码/值移动到 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。考虑“将数据保存在数据库中”的规则。

      【讨论】:

      • 每一行代表我的环境中的一个常见问题解答。一些常见问题解答可以显示图像。这些图像可以有不同的 url(如果 url 协议是 http 或 https,如果图像以开发模式或生产模式显示)。因此,这些常见问题解答是真实数据,但有一些 url 变化。
      • 那么你应该让你的常见问题条目结构更好——图像 url 协议作为一列,图像名称作为另一列等——然后在访问特定常见问题条目时将所有这些内容加载到模板中跨度>
      • @labilbe:您可能需要考虑将链接信息保留在数据中,并在循环中动态生成ActionLinks
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多