2011-08-31 31 views
5

Giả sử chúng ta có một số hành động trong bộ điều khiển:Làm cách nào để nối HTML tùy chỉnh vào cuối chế độ xem với các thuộc tính trong ASP.NET MVC?

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

Tôi muốn có một khả năng để thêm một số mã HTML để cuối HTML điểm của kết quả với sự giúp đỡ của các thuộc tính, ví dụ:

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

nơi

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

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

Filters (ActionFilterAttribute) cho phép thêm một số mã HTML để trên cùng hoặc dưới cùng của web-page nhưng chưa đến cuối HTML điểm của.

Cách lưu trữ tệp này?

Trả lời

12

Bạn có thể sử dụng một bộ lọc đáp ứng:

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, đó thực sự viết nó trên phần cuối của cơ thể, nhưng không phải trên sự kết thúc của dòng xem – gsharp

+0

'_outputStream.Write (buffer, 0, đệm. Chiều dài), 'in' Write' override method nên nói '_outputStream.Write (buffer, offset, count);' nếu không bạn sẽ bị xáo trộn HTML – mdonatas

Các vấn đề liên quan