2012-02-24 91 views
0

我有一个ASP动态脚手架项目,我在其中自定义一个细节视图。在我的数据源中,我有几个包含HTML的字段,我希望在页面上显示呈现的HTML,而不是像当前所做的那样显示源HTML。控制看起来像这样。ASP:DynamicControl呈现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渲染而不是显示其源代码视图。

+0

你确定它应该使用一个动态控件吗?也许考虑一个Response.Write到页面的声明区域。写入将插入html,所以它应该呈现。 – Sinaesthetic 2012-02-25 04:33:38

回答

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> 

而且一切都很好。