ASP:DynamicControl呈现HTML而不是显示源

时间:2012-02-24 18:37:26

标签: asp.net dynamic-controls

我有一个ASP动态脚手架项目,我在其中自定义详细信息视图。在我的数据源中,我有一些包含HTML的字段,我想在页面上显示呈现的HTML,而不是像当前那样显示源HTML。控件看起来像这样。

<tr>
  <td class="DDLightHeader">
     <asp:Label ID="lblStatementHtml" runat="server" Text="Statement" />
  </td>
  <td>
     <asp:DynamicControl ID="dcStatementHtml" runat="server" DataField="StatementHtml"  />
  </td>
</tr>

我对如何继续感到困惑,因为此控件的默认视图是Text.ascx,它显然只不过是一个文字(我用来在我的网站上呈现HTML的相同基本控件。我很熟悉创建一个新的FieldTemplate来渲染HTML,但是如何强制html渲染而不是显示它的源视图。

1 个答案:

答案 0 :(得分:0)

要解决上述问题,我必须创建一个新的FieldTemplate

HTML.ascx

<%@ Control Language="C#" CodeBehind="HTML.ascx.cs" Inherits="ProductDynamicCMS.HTML" %>

<asp:Literal runat="server" ID="Literal1" />

HTML.cs

using System;
using System.Web.DynamicData;
using System.Web.UI;

namespace ProductDynamicCMS
{
    public partial class HTML : FieldTemplateUserControl
    {
        protected override void OnDataBinding(EventArgs e)
        {
            base.OnDataBinding(e);

            object val = FieldValue;
            if (val != null)
                Literal1.Text = val.ToString();
        }

        public override Control DataControl
        {
            get
            {
                return Literal1;
            }
        }

    }
}

然后将此类的UIHint应用于详细信息视图模板中的字段显示。

<tr>
  <td class="DDLightHeader">
     <asp:Label ID="lblStatementHtml" runat="server" Text="Statement" />
  </td>
  <td>
     <asp:DynamicControl ID="dcStatementHtml" runat="server" DataField="StatementHtml" UIHint="HTML"  />
  </td>
</tr>

一切都很好。