2011-06-14 18 views
6

En el siguiente ejemplo,Pasando el formato HTML en un control de usuario ASP.NET

<uc1:MyUserControl> 

    <p>this is html</p> 

</uc1:MyUserControl> 

Cómo accedo "<p>this is html</p>" como una cadena dentro de MyUserControl modo que puede ser inyectarlo en la respuesta?

No estoy hablando acerca de pasar de un parámetro de cadena como <uc1:MyUserControl myparameter="<p>this is html</p>" />, pero ¿Cómo accedo a la verdadera marcado HTML intellisensed multi-revestido, ya sea entre la apertura y cierre de etiquetas o mediante algún otro mecanismo tal como una etiqueta <MessageTemplate>.

¡Puntos de bonificación para una solución que funciona en ASP.NET MVC 3!

EDIT:

Gracias a StriplingWarrior y this link como la pieza del rompecabezas que falta, se hizo la magia:

Por lo tanto, en cualquier vista:

<%@ 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> 

En 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> 

An d finalmente, en Ribbon.ascx.cs (necesidad de añadir manualmente en 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; } 
    } 
} 

rendirá como:

<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> 
+0

¿Esto solo funciona en MVC? Estoy tratando de obtener algo similar para trabajar en un entorno sin MVC en vano, no estoy seguro de qué parte es específica de MVC? Sería genial si creó una respuesta que tiene su solución, o actualizó la respuesta aceptada para incluir su código. –

Respuesta

3

En controles típicos WebForms, el código HTML se pondrá automáticamente en un control literal en la colección Controls de MyUserControl. Los controles con propiedades de plantilla funcionan de forma un poco diferente, pero es posible que aún pueda acceder a esto de manera similar a través de la propiedad cuyo nombre esté usando (por ejemplo, MessageTemplate).

MVC funciona de manera totalmente diferente, y no sé si hay una manera de hacer lo que está preguntando allí. Es posible que desee considerar el uso de javascript para analizar lo que realmente se renderiza en el lado del cliente si no funciona para usted.

+0

Gracias! ¡Eres mi heroe! – Levitikon

+1

@Levitikon: No hay problema. (Solo recuerde marcar esto como la solución si no tiene otras preguntas) – StriplingWarrior

Cuestiones relacionadas