ASP: DynamicControl отображает HTML, а не отображает исходный код - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть 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 голосов
/ 01 марта 2012

Чтобы решить вышеуказанную проблему, мне пришлось создать новую 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>

И все было хорошо.

...