В следующем примере
<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>