【问题标题】:Render a static html page or html markup in a file somewhere inside a asp.net page在 asp.net 页面内的某个文件中呈现静态 html 页面或 html 标记
【发布时间】:2009-10-09 21:16:08
【问题描述】:

我正在使用 asp.net 3.5 并希望将静态 html 文件的内容呈现到一个 asp.net 页面中,该页面包含一个内容占位符中的母版页。我考虑过使用 iframe,但如果可能的话想避免这种情况。或者,如果它更简单,我只想在 html 文件中读取一些文本,例如:


<table>
   <tr>
       <td>
        Hey dude
       <td>
   </tr>
</table>

<div>
   <span>I am special! </span>
</div>

并将其呈现到页面中的该内容占位符中。我曾考虑过使用文字控制来执行此操作,但不确定这是否可行。我要解决的问题是我希望能够让用户访问 html 页面或文本文件,并让他们使用内容更新它。然后在运行时从这个文件中渲染 html 标记。这是应用程序中唯一需要此功能的页面,因此诸如 CMS 系统或 html 编辑器控件之类的东西是多余的。我只需要读取文件中的 a 并在 asp.net 页面中呈现 html 标记。此外,我希望渲染的标记使用我们已经拥有的 css,但我认为无论哪种方式都是给我的。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我会将您上面描述的外部文本文件中的文本读取到类似于 MikeB 解决方案中描述的内存中,然后将其转换为可以添加到页面的 LiteralControl。

    protected void Page_Load(object sender, EventArgs e)
    {
        LiteralControl literal = new LiteralControl( GetExternalHTML() );
        Page.Controls.Add(literal);
    }
    
    private string GetExternalHTML()
    {
         StreamReader sr;
         string html;
         sr = File.OpenText("<path_to_file.txt>");
         html = sr.ReadToEnd();
         sr.Close();
    
         return html;
    }
    

    【讨论】:

    • 听起来是我想做的最好的方式。谢谢!
    【解决方案2】:

    您可以使用服务器端包括:

    http://msdn.microsoft.com/en-us/library/3207d0e3(VS.71).aspx
    

    Response.WriteFile

    http://support.microsoft.com/kb/306575
    

    既然它包含在您的页面中,它肯定会采用您使用的任何 CSS 样式。

    【讨论】:

    • 谢谢,从未听说过服务器端包含。
    【解决方案3】:

    如果您要使用 Literal,请确保设置:

    literal.Mode = LiteralMode.PassThrough;
    

    否则,您可能会创建一个特殊的WebControl(或继承自Literal)来处理此任务。然后,您可以使用自己的方法覆盖 Render(HtmlTextWriter writer) 或类似方法,检索您需要渲染的文件,然后将其写入流中。

    另一种选择是直接调用Page.Response.WriteFile(filename)。但是,我不建议这样做,但这是一种选择。 :) Response 的问题在于它不一定会在您期望的时候发生。

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2017-11-01
      • 2012-02-26
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多