Как добавить пользовательский HTML в конец просмотра с атрибутами в ASP.NET MVC? - PullRequest
6 голосов
/ 31 августа 2011

Предположим, у нас есть какое-то действие в контроллере:

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

Я хочу иметь возможность добавить некоторый HTML-код в конец HTML-результата просмотра с помощью атрибутов, например ::

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

где

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

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

Фильтры (ActionFilterAttribute) позволяют добавлять некоторый HTML-код в верхней или нижней части веб-страницы, но не в конец HTML-представления.

Как заархивировать это?

1 Ответ

12 голосов
/ 31 августа 2011

Вы можете использовать фильтр ответов:

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();
    }
}
...