Передача HTML-разметки в пользовательский элемент управления ASP.NET - PullRequest
6 голосов
/ 14 июня 2011

В следующем примере

<uc1:MyUserControl>

   <p>this is html</p>

</uc1:MyUserControl>

Как получить доступ к "<p>this is html</p>" в виде строки в MyUserControl, чтобы я мог вставить ее в ответ?

Я не говорю о передаче строкового параметра, например <uc1:MyUserControl myparameter="<p>this is html</p>" />, но как получить доступ к истинной многострочной разметке HTML с разметкой между открывающими и закрывающими тегами или с помощью какого-либо другого механизма, такого как <MessageTemplate> tag.

Бонусные баллы за решение, которое работает в ASP.NET MVC 3!

РЕДАКТИРОВАТЬ:

Благодаря StriplingWarrior и эта ссылка как отсутствующая часть головоломки, волшебство было сделано:

Итак, в любом представлении:

<%@ Register src="../../Shared/Ribbon.ascx" tagname="Ribbon" tagprefix="uc1" %>
...
<uc1:Ribbon ID="Ribbon" runat="server">
    <Content>
    Hello world! I am <b>pure html</b> being passed into a UserControl!
    </Content>
</uc1:Ribbon>

В Ribbon.ascx:

<%@ Control Language="C#" CodeBehind="Ribbon.ascx.cs" Inherits="NunYourBeezwax.Views.Shared.Ribbon" %>
<table>
    <tr>
        <td>I am reusable stuff that wraps around dynamic content</td>
        <td><%= this.Content %></td>
        <td>And I am stuff too</td>
    </tr>
</table>

И, наконец, в Ribbon.ascx.cs (необходимо вручную добавить в MVC)

using System.Web.Mvc;
using System.Web.UI;

namespace NunYourBeezwax.Views.Shared
{
    [ParseChildren(true, "Content")]
    public class Ribbon : ViewUserControl
    {
        [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
        public string Content { get; set; }
    }
}

Будет отображаться как:

<table>
    <tr>
        <td>I am reusable stuff that wraps around dynamic content</td>
        <td>Hello world! I am <p>pure html<p> being passed into a UserControl!</td>
        <td>And I am stuff too</td>
    </tr>
</table>

1 Ответ

3 голосов
/ 14 июня 2011

В типичных элементах управления WebForms HTML-код автоматически помещается в элемент управления Literal в коллекции Controls MyUserControl. Элементы управления со свойствами шаблона работают немного по-другому, но вы все равно сможете получить к нему аналогичный доступ через свойство, имя которого вы используете (например, MessageTemplate).

MVC работает совершенно по-другому, и я не знаю, есть ли способ сделать то, что вы там просите. Возможно, вы захотите использовать javascript для анализа того, что действительно отображается на стороне клиента, если это не работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...