使用属性将页眉/页脚注入视图?

时间:2014-02-28 01:03:15

标签: c# asp.net-mvc attributes

我想编写一个属性来将页眉/页脚注入页面。 这是我希望结束代码的样子:

[HeaderFooter]
public ActionResult Index()
{
    return View();
}

HeaderFooter代码:

<header>
    // header code here
</header>


<footer >
    // footer code here
</footer >

查看代码:

<html>

//header to appear here.

PAGE CONTENT

//footer to appear here.

</html>

问题是:如何以直接注入html代码的方式编写属性代码,以便在actionresult中添加更多代码?

1 个答案:

答案 0 :(得分:1)

如上所述,将action属性写入视图输出是不常见的。这可能更适合在视图或布局中使用section声明,或者通过自定义视图引擎。

它不合适的原因是因为你的代码会将HTML写入响应,理想情况是保持关注点的分离,你的观点应该处理与渲染内容有关的一切。

但是要回答你的问题:

public class HeaderFooterAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.Write("<header></header>");
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.Write("<footer></footer>");
    }
}