2011-08-31 9 views
5

Załóżmy, że mamy pewne działania kontrolera:Jak dołączyć niestandardowy HTML do końca widoku z atrybutami w ASP.NET MVC?

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

Chcę mieć możliwość dołączania kodu HTML do końca podstawowego HTML wynikają z pomocą atrybutów, np

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

gdzie

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

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

Filtry (ActionFilterAttribute) pozwalają na dołączanie kodu HTML do górnej lub dolnej części strony internetowej, ale nie do końca HTML widoku danych.

Jak to zarchiwizować?

Odpowiedz

12

Można użyć filtru Odpowiedź:

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, że faktycznie zapisuje go na koniec ciała, ale nie na końcu linii widok – gsharp

+0

'_outputStream.Write (bufor, 0, bufor. Długość); 'w' Nadpisanie metody 'write' powinno wypowiadać' _outputStream.Write (buffer, offset, count); w przeciwnym razie powstaje zniekształcony kod HTML – mdonatas

Powiązane problemy