Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法绕过RenderBody()要求?_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 有没有办法绕过RenderBody()要求?

C# 有没有办法绕过RenderBody()要求?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个ASP.NET MVC web应用程序,所有页面都使用一个主控Layout.cshtmlpage。虽然我通常希望RenderBody(),但我有一个可以在数据库中启用的站点关闭机制,因此我基本上希望有一个类似以下内容的布局页面: @if(DbHelper.SiteIsShutDown) { <h1>Site is shut down temporarily</h1> } else { <h1>Welcome to the site<

我有一个ASP.NET MVC web应用程序,所有页面都使用一个主控
Layout.cshtml
page。虽然我通常希望
RenderBody()
,但我有一个可以在数据库中启用的站点关闭机制,因此我基本上希望有一个类似以下内容的布局页面:

@if(DbHelper.SiteIsShutDown) {
    <h1>Site is shut down temporarily</h1>
}
else {
    <h1>Welcome to the site</h1>
    @RenderBody()
}
@if(DbHelper.siteishutdown){
网站暂时关闭
}
否则{
欢迎来到这个网站
@RenderBody()
}
问题在于,如果
SiteIsShutDown
为true,则不会调用
RenderBody()
,我会得到异常:

尚未为布局页调用“RenderBody”方法


有什么办法可以让我绕过这件事吗?我只想从我的布局页面中呈现一些输出,而不想从我的视图页面中呈现任何内容。

您可能应该将主布局留给呈现视图,而不是在站点关闭时短路视图

您最好检查并在Global.asax中处理它,即在
BeginRequest
中:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if(DbHelper.SiteIsShutDown)
    {
        HttpContext.Current.Response.Redirect("SiteDown");
    }
}

最后,我决定采用与Jerad Rose的解决方案非常相似的解决方案,但进行了修改,使其只在根目录下提供一个名为
sitedabled.htm
的静态文件,并对其进行了修改,使其在站点被禁用时不会进入无限重定向循环:

protected void Application_BeginRequest(object sender, EventArgs ea) {
    string siteDisabledFilePath = "/SiteDisabled.htm";

    if (CachingAndUtils.IsSiteDisabled && HttpContext.Current.Request.FilePath != siteDisabledFilePath) {
        HttpContext.Current.Response.Redirect(siteDisabledFilePath);
    }
}

请注意,如果您真的愿意,您实际上可以“忽略”内容。通常,您在视图代码中编写
@RenderBody()
,该代码评估正文内容,将其粘贴到
帮助错误结果中,然后将其写入输出流。这样,MVC将主体标记为已渲染。您可以通过编写
@{RenderBody();}
(注意大括号)或只编写
RenderBody(),使其认为主体已经渲染,而实际上没有编写任何内容如果已经在代码上下文中。这会评估正文内容,而不实际将其写入输出流。

是否有一种方法可以显示“站点关闭”视图而不使用重定向?投票给自己的答案确实不酷,但更不酷的是使用另一个人的答案并稍微修改它,只会生成不同的答案。。。