2011-08-31 29 views
5

Asumamos que tenemos algún tipo de acción en el controlador:¿Cómo agregar HTML personalizado al final de la vista con atributos en ASP.NET MVC?

public ActionResult SomeAction() 
{ 
    return View(); 
} 

quiero tener una posibilidad para añadir algo de código HTML al final de HTML de vista de resultados con la ayuda de los atributos, por ejemplo:

[SomeHTML] 
public ActionResult SomeAction() 
{ 
    return View(); 
} 

donde

public class SomeHTMLAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var response = filterContext.HttpContext.Response; 

     if (response.ContentType == "text/html") 
     { 
      response.Write("someHTML"); 
     } 
    } 
} 

filtros (ActionFilterAttribute) permiten añadir algo de código HTML a la parte superior o inferior de la página web, pero no hasta el final de HTML de vista.

¿Cómo archivar esto?

Respuesta

12

Se puede usar un filtro de respuesta:

public class SomeHTMLAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Filter = new SomeHTMLFilter(filterContext.HttpContext.Response.Filter); 
     base.OnActionExecuting(filterContext); 
    } 
} 

public class SomeHTMLFilter : MemoryStream 
{ 
    private readonly Stream _outputStream; 
    public SomeHTMLFilter(Stream outputStream) 
    { 
     _outputStream = outputStream; 
    } 

    public override void Write(byte[] buffer, int offset, int count) 
    { 
     _outputStream.Write(buffer, 0, buffer.Length); 
    } 

    public override void Close() 
    { 
     var buffer = Encoding.UTF8.GetBytes("Hello World"); 
     _outputStream.Write(buffer, 0, buffer.Length); 
     base.Close(); 
    } 
} 
+0

Darin, que realmente lo escribe en el extremo del cuerpo, pero no en el final de la línea de visión – gsharp

+0

'_outputStream.Write (buffer, 0, tampón. Length); 'en el método 'Write', override debería decir' _outputStream.Write (buffer, offset, count); 'de lo contrario, se destrozará HTML – mdonatas

Cuestiones relacionadas