C# 是否使用属性将页眉/页脚插入视图?

C# 是否使用属性将页眉/页脚插入视图?,c#,asp.net-mvc,attributes,C#,Asp.net Mvc,Attributes,我想写一个属性,将页眉/页脚插入页面。 下面是我希望最终代码的样子: [HeaderFooter] public ActionResult Index() { return View(); } 头门门代码: <header> // header code here </header> <footer > // footer code here </footer > //标题代码在这里 //这里是页脚代码 查看代码

我想写一个属性,将页眉/页脚插入页面。 下面是我希望最终代码的样子:

[HeaderFooter]
public ActionResult Index()
{
    return View();
}
头门门代码:

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


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

//标题代码在这里
//这里是页脚代码
查看代码:

<html>

//header to appear here.

PAGE CONTENT

//footer to appear here.

</html>

//标题显示在这里。
页面内容
//要在此处显示的页脚。

问题是:如何编写属性代码,使其直接将html代码注入视图,而不在actionresult中添加更多代码?

如前所述,将操作属性写入视图输出是不寻常的。这可能更适合在视图或布局中使用
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>");
    }
}
公共类HeaderFootAttribute:ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Write(“”);
}
公共覆盖无效OnResultExecuted(ResultExecutedContext筛选器上下文)
{
filterContext.RequestContext.HttpContext.Response.Write(“”);
}
}

这对于ASP.Net MVC来说是非常不寻常的。。。通常您会使用布局文件来添加页脚/页眉。。。另一方面,您可以轻松地以任何方式修改结果—所以您可以尝试
HeaderFooter:actionfilteratAttribute
correct。我这样做是因为我想使属性有条件。如果您有许多布局,并且希望从一个actionresult自定义到另一个actionresult,那么这将非常有用。您可能想单独询问您实际想要实现的目标-我怀疑您当前的路径不是最佳路径,因此会给您带来很多痛苦。+0:Sample不会产生可接受的结果,因为它将编写HTML在大多数情况下,在页面开始之前。您需要返回定制的
ActionResult
,它包装实际结果并在适当的时间呈现HTML。